import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
String input = "1.1-10.1.2-8";
Range[] ranges = parse(input);
List<String> result = new ArrayList<>();
compute(ranges, result, 0, "");
System.out.println(result);
}
private static void compute(Range[] ranges, List<String> result, int index, String prefix) {
if (index >= ranges.length) {
result.add(prefix);
return;
}
Range range = ranges[index];
for (int i = range.start; i <= range.end; i++) {
compute(ranges, result, index + 1, index == 0 ? prefix + i : prefix + "." + i);
}
}
private static Range[] parse(String ip) {
String[] parts = ip.split("\\.");
Range[] ranges = new Range[parts.length];
for (int i = 0; i < parts.length; i++) {
ranges[i] = parseRange(parts[i]);
}
return ranges;
}
private static Range parseRange(String part) {
String[] nums = part.split("-", 2);
if (nums.length == 2) {
return new Range(Integer.parseInt(nums[0]), Integer.parseInt(nums[1]));
} else {
return new Range(Integer.parseInt(part), Integer.parseInt(part));
}
}
static class Range {
int start;
int end;
Range(int start, int end) {
this.start = start;
this.end = end;
}
}
}