#include <bits/stdc++.h>
using namespace std;
const int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1};
int n, m, q, cnt[10005];
bool visit[105][105], cutted1[105][105], cutted2[105][105];
void Swap(int &a, int &b) {
  int t = a;
  a = b;
  b = t;
}
bool Reachable(int x, int y, int fx, int fy) {
  if (x < 0 || x >= n || y < 0 || y >= m || visit[x][y]) return false;
  if (cutted1[x][y]) {
    if (fx > x) return false;
  }
  if (cutted2[x][y]) {
    if (fy > y) return false;
  }
  if (fx < x && cutted1[x - 1][y]) return false;
  if (fy < y && cutted2[x][y - 1]) return false;
  return true;
}
int dfs(int x, int y, int fx, int fy) {
  int tot = 0, xb;
  if (Reachable(x, y, fx, fy))
    tot++;
  else
    return 0;
  visit[x][y] = true;
  for (xb = 0; xb < 4; xb++) tot += dfs(x + dx[xb], y + dy[xb], fx, fy);
  return tot;
}
int main() {
  cin >> n >> m >> q;
  int xb, x2, a, b, c, d;
  for (xb = 0; xb < q; xb++) {
    cin >> a >> b >> c >> d;
    if (a == c) {
      if (b > d) Swap(b, d);
      for (x2 = b; x2 < d; x2++) cutted1[a - 1][x2] = 1;
    } else {
      if (a > c) Swap(a, c);
      for (x2 = a; x2 < c; x2++) cutted2[x2][b - 1] = 1;
    }
  }
  for (xb = 0; xb < n; xb++)
    for (x2 = 0; x2 < m; x2++) {
      if (Reachable(xb, x2, xb, x2)) cnt[dfs(xb, x2, xb, x2)]++;
    }
  for (xb = 1; xb <= n * m; xb++)
    for (x2 = 0; x2 < cnt[xb]; x2++) cout << xb << ' ';
  return 0;
}
