#include <bits/stdc++.h>
using namespace std;
int read() {
  int s = 0, t = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') t = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
  return s * t;
}
int f[2010][2010];
int u[101000], v[101000], cnt, d[2010], a, b, m;
void add(int x, int y) { u[++cnt] = x, v[cnt] = y, d[x]++, d[y]++; }
int main() {
  a = read(), b = read(), m = read();
  int c = 0;
  for (int i = 1; i <= m; i++) {
    int x = read(), y = read() + a;
    add(x, y);
  }
  for (int i = 1; i <= a + b; i++) c = max(c, d[i]);
  printf("%d\n", c);
  for (int i = 1; i <= m; i++) {
    int c1, c2;
    for (c1 = 1; c1 <= c; c1++)
      if (!f[u[i]][c1]) break;
    for (c2 = 1; c2 <= c; c2++)
      if (!f[v[i]][c2]) break;
    f[u[i]][c1] = v[i];
    f[v[i]][c2] = u[i];
    if (c1 == c2) continue;
    for (int c0 = c2, x = v[i]; x; x = f[x][c0], c0 ^= c1 ^ c2)
      swap(f[x][c1], f[x][c2]);
  }
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= c; j++)
      if (f[u[i]][j] == v[i]) {
        printf("%d ", j);
        break;
      }
  return 0;
}
