1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
#include <list>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstdio>

#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))

using namespace std;


vector<int> IAx;
vector<int> IAy;
vector<int> IBx;
vector<int> IBy;


vector<int> Ax;
vector<int> Ay;
vector<int> Bx;
vector<int> By;

vector<int> P;


list<int> abcd;
struct fajne {
	bool operator() (int i,int j) { return Ax[i] < Ax[j] || Ax[i] == Ax[j] && Bx[i] < Bx[j] ||
									 Ax[i] == Ax[j] && Bx[i] == Bx[j] && Ay[i] < Ay[j] ||
									 Ax[i] == Ax[j] && Bx[i] == Bx[j] && Ay[i] == Ay[j] && By[i] < By[j] ; }
} cmp;

struct foo {
	bool operator() (int i,int j) { return IAx[i] < IAx[j] || IAx[i] == IAx[j] && IBx[i] < IBx[j] ||
									 IAx[i] == IAx[j] && IBx[i] == IBx[j] && IAy[i] < IAy[j] ||
									 IAx[i] == IAx[j] && IBx[i] == IBx[j] && IAy[i] == IAy[j] && IBy[i] < IBy[j] ; }
} bar;

int N;
int a,b,c,d;
int main()
{
	scanf("%d",&N);
	for (int i = 0; i<N;++i)
	{
		scanf("%d %d %d %d",&a,&b,&c,&d);
		IAx.push_back(a);
		IBx.push_back(b);
		IAy.push_back(c);
		IBy.push_back(d);
		P.push_back(i);

	}
	sort(P.begin(),P.end(),bar);


	for (int i =0; i< N;++i)
	{
		a = IAx[P[i]];
		b = IBx[P[i]];
		c = IAy[P[i]];
		d = IBy[P[i]];

		int jeszcze = 1;
		while (jeszcze)
		{
			jeszcze = 0;
			for(list<int>::iterator it = abcd.begin(); it != abcd.end(); ++it)
			//FOREACH(it,abcd)
			{
			
				int pos = *it;
				//printf("pos %d",pos);
				if (!( Ax[pos] >= b || Bx[pos] <= a || Ay[pos] >= d || By[pos] <= c ))
				{

					a = min(a,Ax[pos]);
					b = max(b,Bx[pos]);
					c = min(c,Ay[pos]);
					d = max(d,By[pos]);
					jeszcze = 1;
					abcd.erase(it);
					break;
				}
			}
			//printf("jeszcze %d\n",jeszcze);
		}
		abcd.push_front( Ax.size() );
		Ax.push_back(a);
		Bx.push_back(b);
		Ay.push_back(c);
		By.push_back(d);
	}

	vector<int> res(abcd.begin(), abcd.end());
	sort(res.begin(),res.end(), cmp);
	printf("%d\n",res.size());
	for (int i = 0 ; i<res.size();++i)
	{
		printf("%d %d %d %d\n",Ax[res[i]],Bx[res[i]],Ay[res[i]],By[res[i]]);
	}
	return 0;
}