import
java.util.ArrayList;
import
java.util.Collections;
import
java.util.Comparator;
class
GFG{
static
class
Pair
{
int
first, second;
public
Pair(
int
first,
int
second)
{
this
.first = first;
this
.second = second;
}
}
static
void
findNumbers(ArrayList<Pair> ranges,
int
m)
{
ArrayList<Integer> ans =
new
ArrayList<>();
int
prev =
0
;
for
(
int
j =
0
; j < ranges.size(); j++)
{
int
start = ranges.get(j).first;
int
end = ranges.get(j).second;
for
(
int
i = prev +
1
; i < start; i++)
ans.add(i);
prev = end;
}
for
(
int
i = prev +
1
; i <= m; i++)
ans.add(i);
for
(
int
i =
0
; i < ans.size(); i++)
if
(ans.get(i) <= m)
System.out.print(ans.get(i) +
" "
);
}
static
ArrayList<Pair> mergeRanges(ArrayList<Pair> ranges,
int
m)
{
Collections.sort(ranges,
new
Comparator<Pair>()
{
public
int
compare(Pair first, Pair second)
{
if
(first.first == second.first)
{
return
first.second - second.second;
}
return
first.first - second.first;
}
});
ArrayList<Pair> ans =
new
ArrayList<>();
int
prevFirst = ranges.get(
0
).first,
prevLast = ranges.get(
0
).second;
for
(
int
i =
0
; i < m; i++)
{
int
start = ranges.get(i).first;
int
last = ranges.get(i).second;
if
(start > prevLast)
{
ans.add(
new
Pair(prevFirst, prevLast));
prevFirst = ranges.get(i).first;
prevLast = ranges.get(i).second;
}
else
prevLast = last;
if
(i == m -
1
)
ans.add(
new
Pair(prevFirst, prevLast));
}
return
ans;
}
public
static
void
main(String[] args)
{
ArrayList<Pair> ranges =
new
ArrayList<>();
ranges.add(
new
Pair(
1
,
2
));
ranges.add(
new
Pair(
4
,
5
));
int
n = ranges.size();
int
m =
6
;
ArrayList<Pair> mergedRanges = mergeRanges(ranges, n);
findNumbers(mergedRanges, m);
}
}