#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e3 + 5;
int m, n, k;
int b[N][N];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
const int INF = 1e9 + 5;
void loang(int x, int y, int val) {
queue<pair<int, int>> q;
q.push({x, y});
b[x][y] = INF; // Mark the cell as visited
while (!q.empty()) {
auto [cx, cy] = q.front(); q.pop();
for (int d = 0; d < 4; ++d) {
int nx = cx + dx[d];
int ny = cy + dy[d];
if (nx >= 0 && nx < m && ny >= 0 && ny < n && b[nx][ny] == val) {
b[nx][ny] = INF; // Mark as visited
q.push({nx, ny});
}
}
}
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
freopen("cake.inp", "r", stdin);
freopen("cake.out", "w", stdout);
while (true) {
cin >> m >> n;
if (m == 0 && n == 0) break;
cin >> k;
memset(b, 0, sizeof(b)); // Initialize the grid to 0
for (int i = 1; i <= k; ++i) {
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
// Fill the rectangle
for (int x = x1; x < x2; ++x) {
for (int y = y1; y < y2; ++y) {
b[x][y] += (1 << (i - 1)); // Use i-1 to set the correct bit
}
}
}
int ans = 0;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (b[i][j] != INF && b[i][j] != 0) { // Ensure it's not visited and not empty
ans++;
loang(i, j, b[i][j]);
}
}
}
cout << ans << "\n"; // Output the count of distinct regions
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAxZTMgKyA1OwppbnQgbSwgbiwgazsKaW50IGJbTl1bTl07IAppbnQgZHhbNF0gPSB7MSwgLTEsIDAsIDB9OwppbnQgZHlbNF0gPSB7MCwgMCwgMSwgLTF9Owpjb25zdCBpbnQgSU5GID0gMWU5ICsgNTsKCnZvaWQgbG9hbmcoaW50IHgsIGludCB5LCBpbnQgdmFsKSB7CiAgICBxdWV1ZTxwYWlyPGludCwgaW50Pj4gcTsKICAgIHEucHVzaCh7eCwgeX0pOwogICAgYlt4XVt5XSA9IElORjsgLy8gTWFyayB0aGUgY2VsbCBhcyB2aXNpdGVkCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGF1dG8gW2N4LCBjeV0gPSBxLmZyb250KCk7IHEucG9wKCk7CiAgICAgICAgZm9yIChpbnQgZCA9IDA7IGQgPCA0OyArK2QpIHsKICAgICAgICAgICAgaW50IG54ID0gY3ggKyBkeFtkXTsKICAgICAgICAgICAgaW50IG55ID0gY3kgKyBkeVtkXTsKICAgICAgICAgICAgaWYgKG54ID49IDAgJiYgbnggPCBtICYmIG55ID49IDAgJiYgbnkgPCBuICYmIGJbbnhdW255XSA9PSB2YWwpIHsKICAgICAgICAgICAgICAgIGJbbnhdW255XSA9IElORjsgLy8gTWFyayBhcyB2aXNpdGVkCiAgICAgICAgICAgICAgICBxLnB1c2goe254LCBueX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIGZyZW9wZW4oImNha2UuaW5wIiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJjYWtlLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIAogICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBjaW4gPj4gbSA+PiBuOwogICAgICAgIGlmIChtID09IDAgJiYgbiA9PSAwKSBicmVhazsKCiAgICAgICAgY2luID4+IGs7CiAgICAgICAgbWVtc2V0KGIsIDAsIHNpemVvZihiKSk7IC8vIEluaXRpYWxpemUgdGhlIGdyaWQgdG8gMAoKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBrOyArK2kpIHsKICAgICAgICAgICAgaW50IHgxLCB5MSwgeDIsIHkyOwogICAgICAgICAgICBjaW4gPj4geDEgPj4geTEgPj4geDIgPj4geTI7CiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHJlY3RhbmdsZQogICAgICAgICAgICBmb3IgKGludCB4ID0geDE7IHggPCB4MjsgKyt4KSB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0geTE7IHkgPCB5MjsgKyt5KSB7CiAgICAgICAgICAgICAgICAgICAgYlt4XVt5XSArPSAoMSA8PCAoaSAtIDEpKTsgLy8gVXNlIGktMSB0byBzZXQgdGhlIGNvcnJlY3QgYml0CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaW50IGFucyA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyArK2opIHsKICAgICAgICAgICAgICAgIGlmIChiW2ldW2pdICE9IElORiAmJiBiW2ldW2pdICE9IDApIHsgLy8gRW5zdXJlIGl0J3Mgbm90IHZpc2l0ZWQgYW5kIG5vdCBlbXB0eQogICAgICAgICAgICAgICAgICAgIGFucysrOwogICAgICAgICAgICAgICAgICAgIGxvYW5nKGksIGosIGJbaV1bal0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7IC8vIE91dHB1dCB0aGUgY291bnQgb2YgZGlzdGluY3QgcmVnaW9ucwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==