-   
- #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=