1 #include <cstdio>
2 #include <cctype>
3 #include <algorithm>
4 #include <cmath>
5 #include <cstring>
6 #include <vector>
7 #include <queue>
8 #include <utility>
9 #define number s-'0'
10
11 using namespace std;
12
13 const int MAX_N=600;
14 const long long INF=0x3f3f3f3f;
15 const int dx[4]{-1,0,0,1};
16 const int dy[4]{0,1,-1,0};
17 int N,H,W;
18 int X1[MAX_N],X2[MAX_N],Y1[MAX_N],Y2[MAX_N];
19 bool fld[MAX_N*6][MAX_N*6];
20
21 void read(int &x){
22 char s;
23 x=0;
24 bool flag=0;
25 while(!isdigit(s=getchar()))
26 (s=='-')&&(flag=true);
27 for(x=number;isdigit(s=getchar());x=x*10+number);
28 (flag)&&(x=-x);
29 }
30
31 void write(int x)
32 {
33 if(x<0)
34 {
35 putchar('-');
36 x=-x;
37 }
38 if(x>9)
39 write(x/10);
40 putchar(x%10+'0');
41 }
42
43 int compress(int *x1, int *x2, int w);
44
45 int main()
46 {
47 read(W);read(H);read(N);
48 for (int i=0; i<N; i++)
49 {
50 read(X1[i]);read(Y1[i]);
51 read(X2[i]);read(Y2[i]);
52 }
53 W=compress(X1, X2, W);
54 H=compress(Y1, Y2, H);
55 memset(fld, 0, sizeof(fld));
56 for (int i=0; i<N; i++)
57 for (int y=Y1[i]; y<=Y2[i]; y++)
58 for (int x=X1[i]; x<=X2[i]; x++)
59 fld[y][x]=true;
60 int ans=0;
61 for (int y=0; y<H; y++)
62 {
63 for (int x=0; x<W; x++)
64 {
65 if (fld[x][y]) continue;
66 ans++;
67 queue<pair<int, int>> que;
68 que.push(make_pair(x,y));
69 while (!que.empty())
70 {
71 int sx=que.front().first, sy=que.front().second;
72 que.pop();
73 for (int i=0; i<4; i++)
74 {
75 int tx=sx+dx[i], ty=sy+dy[i];
76 if (tx<0 || tx>=W || ty<0 || ty>=H) continue;
77 if (fld[tx][ty]) continue;
78 que.push(make_pair(tx,ty));
79 fld[tx][ty]=true;
80 }
81 }
82 }
83 }
84 write(ans);
85 putchar('\n');
86 }
87
88 int compress(int *x1, int *x2, int w)
89 {
90 vector<int> xs;
91 for (int i=0; i<N; i++)
92 {
93 for (int d=-1; d<=1; d++)
94 {
95 int tx1=x1[i]+d, tx2=x2[i]+d;
96 if (1<=tx1 && tx1<=w) xs.push_back(tx1);
97 if (1<=tx2 && tx2<=w) xs.push_back(tx2);
98 }
99 }
100 sort(xs.begin(),xs.end());
101 xs.erase(unique(xs.begin(),xs.end()),xs.end());
102 for (int i=0; i<N; i++)
103 {
104 x1[i]=find(xs.begin(), xs.end(), x1[i])-xs.begin();
105 x2[i]=find(xs.begin(), xs.end(), x2[i])-xs.begin();
106 }
107 return xs.size();
108 }