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
#include <cstdio>
#include <vector>
#include <algorithm>
#define MAKS 100010
using namespace std;
struct pr
{
    int x1,x2,y1,y2;
    pr(int xx1,int xx2,int yy1,int yy2) : x1(xx1), x2(xx2),y1(yy1),y2(yy2) {}
};
vector<pr> tmp[2];
bool tnie(const pr &a, const pr &b)
{
    if(a.x1>=b.x2)return false;
    if(a.x2<=b.x1)return false;
    if(a.y1>=b.y2)return false;
    if(a.y2<=b.y1)return false;
    return true;
}
bool cmp(const pr &a, const pr &b)
{
    if(a.x1!=b.x1)return a.x1<b.x1;
    if(a.x2!=b.x2)return a.x2<b.x2;
    if(a.y1!=b.y1)return a.y1<b.y1;
    return a.y2<b.y2;
}
int main()
{
    int n;
    scanf("%d",&n);
    
    for(int i=0;i<n;i++)
    {
        int x1,x2,y1,y2;
        scanf("%d %d %d %d",&x1,&x2,&y1,&y2);
        tmp[0].push_back(pr(x1,x2,y1,y2));
    }
    int akt=0;
    int poprz;
    bool ok;
    do
    {
        ok=true;
        
        poprz=akt;
        akt=1-akt;
        tmp[akt].clear();
        
        int p=-1,d=-1;
        
        for(int i=0;i<tmp[poprz].size();i++)
        {
            for(int j=i+1;j<tmp[poprz].size();j++)
            {
                if(tnie(tmp[poprz][i],tmp[poprz][j]))
                {
                    ok=false;
                    p=i; d=j;
                    break;
                }
            }
            if(!ok)break;
        }
        
        for(int i=0;i<tmp[poprz].size();i++)
        {
            if(i==p || i==d)continue;
            tmp[akt].push_back(tmp[poprz][i]);
        }
        if(!ok)
        {
            int x1=min(tmp[poprz][p].x1,tmp[poprz][d].x1);
            int x2=max(tmp[poprz][p].x2,tmp[poprz][d].x2);
            int y1=min(tmp[poprz][p].y1,tmp[poprz][d].y1);
            int y2=max(tmp[poprz][p].y2,tmp[poprz][d].y2);
            tmp[akt].push_back(pr(x1,x2,y1,y2));
        }
    }
    while(!ok);
    
    sort(tmp[akt].begin(),tmp[akt].end(),cmp);
    printf("%d\n",(int)tmp[akt].size());
    for(int i=0;i<tmp[akt].size();i++)
    {
        printf("%d %d %d %d\n",tmp[akt][i].x1,tmp[akt][i].x2,tmp[akt][i].y1,tmp[akt][i].y2);
    }
}