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
#include <cstdio>
#include <algorithm>

using namespace std;

struct pros
{
    int x1,y1,x2,y2;

    friend bool operator < (pros a, pros b)
    {
        if (a.x1==a.x1)
        {
            if (a.x2==b.x2)
            {
                if (a.y1==b.y1)
                    return a.y2<b.y2;
                return a.y1<b.y1;
            }
            return a.x2<b.x2;
        }
        return a.x1<b.x1;
    }
};

pros t[100005];

int main ()
{
    int n, mam, a, b, c;
    bool yup;

    scanf ("%d", &n);
    mam=n;

    for (a=0; a<n; a++)
        scanf ("%d%d%d%d", &t[a].x1, &t[a].x2, &t[a].y1, &t[a].y2);

    yup=1;

    while (yup)
    {
        yup=0;

        for (a=0; !yup && a<mam; a++)
        {
            for (b=a+1; b<mam; b++)
            {
                if (t[a].x1<t[b].x2 && t[a].x2>t[b].x1 && t[a].y1<t[b].y2 && t[a].y2>t[b].y1)
                {
                    t[a].x1=min(t[a].x1,t[b].x1);
                    t[a].x2=max(t[a].x2,t[b].x2);
                    t[a].y1=min(t[a].y1,t[b].y1);
                    t[a].y2=max(t[a].y2,t[b].y2);
                    t[b]=t[--mam];
                    yup=1;
                    break;
                }
            }
        }
    }

    sort(t,t+mam);
    printf ("%d\n", mam);

    for (a=0; a<mam; a++)
        printf ("%d %d %d %d\n", t[a].x1, t[a].x2, t[a].y1, t[a].y2);

    return 0;
}