#include <bits/stdc++.h>
using namespace std;
//debug statements
#define TRACE
#ifdef TRACE
#define trace1(x) cerr << #x << ": " << x << endl;
#define trace2(x, y) cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
#define trace3(x, y, z) cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
#define trace4(a, b, c, d) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl;
#define trace5(a, b, c, d, e) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl;
#define trace6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;
#else
#define trace1(x)
#define trace2(x, y)
#define trace3(x, y, z)
#define trace4(a, b, c, d)
#define trace5(a, b, c, d, e)
#define trace6(a, b, c, d, e, f)
#endif
//Structure of Interval defined by nterviewbit
struct Interval{
int start;
int end;
Interval() : start(0), end(0) {}
Interval(int s, int e) : start(s), end(e) {}
};
//operator just in case I needed sorting
bool compare(Interval a , Interval b){
if(a.start<b.start)
return true;
if(a.end<b.end)
return true;
return false;
}
//swap function to check if start is greater than end , if so then swap them
void swapp(Interval *t){
if(t->start>t->end){
int p = t->end ;
t->end = t->start;
t->start = p;
}
}
class Solution {
public:
vector<Interval>merge(vector<Interval> &A) {
vector<Interval>ans;
sort(A.begin(),A.end(),compare);
for(int i=0;i<(int)A.size();i++){
trace2(A[i].start, A[i].end);
swapp(&A[i]);
trace2(A[i].start, A[i].end);
}
int j=0;
int sz = A.size();
while(j<sz){
while(j+1<sz and max(A[j].start,A[j+1].start) <= min(A[j].end,A[j+1].end)){
Interval *x = new Interval(min(A[j].start,A[j+1].start),max(A[j].end,A[j+1].end));
trace2(x->start,x->end);
trace2(A[j].start,A[j].end);
A[j] = *x;
trace2(A[j].start,A[j].end);
trace2(A[j+1].start,A[j+1].end);
A[j+1] = *x;
trace2(A[j+1].start,A[j+1].end);
j++;
free(x);
}
ans.push_back(A[j]);
j++;
}
// for(int i=0;i<ans.size();i++){
// printf("i %d [%d %d]",i,ans[i].start,ans[i].end);
// cout<<endl;
// }
return ans;
}
};
// BEGIN CUT HERE
int main() {
Solution *obj = new Solution();
// x denotes the number of intervals
int x;
cin>>x;
vector<Interval>v;
//an interval input consist of 2 integers start and end marked by a and b respectively
for(int i=0;i<x;i++){
int a,b;
cin>>a>>b;
Interval *interval = new Interval(a,b);
trace2(interval->start,interval->end);
v.push_back(*interval);
delete interval;
}
vector<Interval>ans = obj->merge(v);
for(int i=0;i<(int)ans.size();i++){
printf("i %d [%d %d]",i,ans[i].start,ans[i].end);
cout<<endl;
}
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgovL2RlYnVnIHN0YXRlbWVudHMKI2RlZmluZSBUUkFDRQogCiNpZmRlZiBUUkFDRQojZGVmaW5lIHRyYWNlMSh4KSAgICAgICAgICAgICAgICBjZXJyIDw8ICN4IDw8ICI6ICIgPDwgeCA8PCBlbmRsOwojZGVmaW5lIHRyYWNlMih4LCB5KSAgICAgICAgICAgICBjZXJyIDw8ICN4IDw8ICI6ICIgPDwgeCA8PCAiIHwgIiA8PCAjeSA8PCAiOiAiIDw8IHkgPDwgZW5kbDsKI2RlZmluZSB0cmFjZTMoeCwgeSwgeikgICAgICAgICAgY2VyciA8PCAjeCA8PCAiOiAiIDw8IHggPDwgIiB8ICIgPDwgI3kgPDwgIjogIiA8PCB5IDw8ICIgfCAiIDw8ICN6IDw8ICI6ICIgPDwgeiA8PCBlbmRsOwojZGVmaW5lIHRyYWNlNChhLCBiLCBjLCBkKSAgICAgICBjZXJyIDw8ICNhIDw8ICI6ICIgPDwgYSA8PCAiIHwgIiA8PCAjYiA8PCAiOiAiIDw8IGIgPDwgIiB8ICIgPDwgI2MgPDwgIjogIiA8PCBjIDw8ICIgfCAiIDw8ICNkIDw8ICI6ICIgPDwgZCA8PCBlbmRsOwojZGVmaW5lIHRyYWNlNShhLCBiLCBjLCBkLCBlKSAgICBjZXJyIDw8ICNhIDw8ICI6ICIgPDwgYSA8PCAiIHwgIiA8PCAjYiA8PCAiOiAiIDw8IGIgPDwgIiB8ICIgPDwgI2MgPDwgIjogIiA8PCBjIDw8ICIgfCAiIDw8ICNkIDw8ICI6ICIgPDwgZCA8PCAiIHwgIiA8PCAjZSA8PCAiOiAiIDw8IGUgPDwgZW5kbDsKI2RlZmluZSB0cmFjZTYoYSwgYiwgYywgZCwgZSwgZikgY2VyciA8PCAjYSA8PCAiOiAiIDw8IGEgPDwgIiB8ICIgPDwgI2IgPDwgIjogIiA8PCBiIDw8ICIgfCAiIDw8ICNjIDw8ICI6ICIgPDwgYyA8PCAiIHwgIiA8PCAjZCA8PCAiOiAiIDw8IGQgPDwgIiB8ICIgPDwgI2UgPDwgIjogIiA8PCBlIDw8ICIgfCAiIDw8ICNmIDw8ICI6ICIgPDwgZiA8PCBlbmRsOwogCiNlbHNlCiAKI2RlZmluZSB0cmFjZTEoeCkKI2RlZmluZSB0cmFjZTIoeCwgeSkKI2RlZmluZSB0cmFjZTMoeCwgeSwgeikKI2RlZmluZSB0cmFjZTQoYSwgYiwgYywgZCkgICAgCiNkZWZpbmUgdHJhY2U1KGEsIGIsIGMsIGQsIGUpCiNkZWZpbmUgdHJhY2U2KGEsIGIsIGMsIGQsIGUsIGYpCgojZW5kaWYgCgovL1N0cnVjdHVyZSBvZiBJbnRlcnZhbCBkZWZpbmVkIGJ5IG50ZXJ2aWV3Yml0CnN0cnVjdCBJbnRlcnZhbHsKCWludCBzdGFydDsKCWludCBlbmQ7CglJbnRlcnZhbCgpIDogc3RhcnQoMCksIGVuZCgwKSB7fQogICAgSW50ZXJ2YWwoaW50IHMsIGludCBlKSA6IHN0YXJ0KHMpLCBlbmQoZSkge30KfTsKCi8vb3BlcmF0b3IganVzdCBpbiBjYXNlIEkgbmVlZGVkIHNvcnRpbmcKYm9vbCBjb21wYXJlKEludGVydmFsIGEgLCBJbnRlcnZhbCBiKXsKCWlmKGEuc3RhcnQ8Yi5zdGFydCkKCQlyZXR1cm4gdHJ1ZTsKCWlmKGEuZW5kPGIuZW5kKQoJCXJldHVybiB0cnVlOwoJcmV0dXJuIGZhbHNlOwp9CgovL3N3YXAgZnVuY3Rpb24gdG8gY2hlY2sgaWYgc3RhcnQgaXMgZ3JlYXRlciB0aGFuIGVuZCAsIGlmIHNvIHRoZW4gc3dhcCB0aGVtCnZvaWQgc3dhcHAoSW50ZXJ2YWwgKnQpewoJaWYodC0+c3RhcnQ+dC0+ZW5kKXsKCSAgIGludCBwID0gdC0+ZW5kIDsKCSAgIHQtPmVuZCA9IHQtPnN0YXJ0OwoJICAgdC0+c3RhcnQgPSBwOwogICB9Cn0KCmNsYXNzIFNvbHV0aW9uIHsKcHVibGljOgogICAgdmVjdG9yPEludGVydmFsPm1lcmdlKHZlY3RvcjxJbnRlcnZhbD4gJkEpIHsKCQl2ZWN0b3I8SW50ZXJ2YWw+YW5zOwoJCXNvcnQoQS5iZWdpbigpLEEuZW5kKCksY29tcGFyZSk7CgkJZm9yKGludCBpPTA7aTwoaW50KUEuc2l6ZSgpO2krKyl7CgkJCXRyYWNlMihBW2ldLnN0YXJ0LCBBW2ldLmVuZCk7CgkJCXN3YXBwKCZBW2ldKTsKCQkJdHJhY2UyKEFbaV0uc3RhcnQsIEFbaV0uZW5kKTsKCQl9CgkJaW50IGo9MDsKCQlpbnQgc3ogPSBBLnNpemUoKTsKCQl3aGlsZShqPHN6KXsKCQkJd2hpbGUoaisxPHN6IGFuZCBtYXgoQVtqXS5zdGFydCxBW2orMV0uc3RhcnQpIDw9IG1pbihBW2pdLmVuZCxBW2orMV0uZW5kKSl7CgkJCQlJbnRlcnZhbCAqeCA9IG5ldyBJbnRlcnZhbChtaW4oQVtqXS5zdGFydCxBW2orMV0uc3RhcnQpLG1heChBW2pdLmVuZCxBW2orMV0uZW5kKSk7CgkJCQl0cmFjZTIoeC0+c3RhcnQseC0+ZW5kKTsKCQkJCXRyYWNlMihBW2pdLnN0YXJ0LEFbal0uZW5kKTsKCQkJCUFbal0gPSAqeDsKCQkJCXRyYWNlMihBW2pdLnN0YXJ0LEFbal0uZW5kKTsKCQkJCXRyYWNlMihBW2orMV0uc3RhcnQsQVtqKzFdLmVuZCk7CgkJCQlBW2orMV0gPSAqeDsKCQkJCXRyYWNlMihBW2orMV0uc3RhcnQsQVtqKzFdLmVuZCk7CgkJCQlqKys7CgkJCQlmcmVlKHgpOwoJCQl9CgkJCWFucy5wdXNoX2JhY2soQVtqXSk7CgkJCWorKzsKCQl9CgkJLy8gZm9yKGludCBpPTA7aTxhbnMuc2l6ZSgpO2krKyl7CgkJLy8gICAgIHByaW50ZigiaSAlZCBbJWQgJWRdIixpLGFuc1tpXS5zdGFydCxhbnNbaV0uZW5kKTsKCQkvLyAgICAgY291dDw8ZW5kbDsKCQkvLyB9CgkJcmV0dXJuIGFuczsKfQogICAgCn07Ci8vIEJFR0lOIENVVCBIRVJFCgppbnQgbWFpbigpIHsKCVNvbHV0aW9uICpvYmogPSBuZXcgU29sdXRpb24oKTsKCS8vIHggZGVub3RlcyB0aGUgbnVtYmVyIG9mIGludGVydmFscwoJaW50IHg7CgljaW4+Png7Cgl2ZWN0b3I8SW50ZXJ2YWw+djsKCS8vYW4gaW50ZXJ2YWwgaW5wdXQgY29uc2lzdCBvZiAyIGludGVnZXJzIHN0YXJ0IGFuZCBlbmQgbWFya2VkIGJ5IGEgYW5kIGIgcmVzcGVjdGl2ZWx5Cglmb3IoaW50IGk9MDtpPHg7aSsrKXsKCQlpbnQgYSxiOwoJCWNpbj4+YT4+YjsKCQlJbnRlcnZhbCAqaW50ZXJ2YWwgPSBuZXcgSW50ZXJ2YWwoYSxiKTsKCQl0cmFjZTIoaW50ZXJ2YWwtPnN0YXJ0LGludGVydmFsLT5lbmQpOwoJCXYucHVzaF9iYWNrKCppbnRlcnZhbCk7CgkJCgkJZGVsZXRlIGludGVydmFsOwoJfQoJdmVjdG9yPEludGVydmFsPmFucyA9IG9iai0+bWVyZ2Uodik7CgkgZm9yKGludCBpPTA7aTwoaW50KWFucy5zaXplKCk7aSsrKXsKICAgICAgICAgcHJpbnRmKCJpICVkIFslZCAlZF0iLGksYW5zW2ldLnN0YXJ0LGFuc1tpXS5lbmQpOwogICAgICAgICBjb3V0PDxlbmRsOwogICAgIH0KfQo=