#include <bits/stdc++.h>
using namespace std;
int a, b, m, mx, ans[100010], id[1010][1010];
int linkx[1010][1010], linky[1010][1010];
void dfs(int x, int u, int v, int t) {
  int tmp;
  if (!t) {
    tmp = linkx[x][u];
    if (tmp != -1) {
      dfs(tmp, v, u, t ^ 1);
      linky[tmp][v] = x;
    }
    linkx[x][v] = tmp;
    linkx[x][u] = -1;
  } else {
    tmp = linky[x][u];
    if (tmp != -1) {
      dfs(tmp, v, u, t ^ 1);
      linkx[tmp][v] = x;
    }
    linky[x][v] = tmp;
    linky[x][u] = -1;
  }
}
int main() {
  scanf("%d%d%d", &a, &b, &m);
  memset(linkx, -1, sizeof(linkx));
  memset(linky, -1, sizeof(linky));
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    id[x][y] = i;
    int u = 1, v = 1;
    while (linkx[x][u] != -1) {
      u++;
    }
    while (linky[y][v] != -1) {
      v++;
    }
    if (u == v) {
      linkx[x][u] = y;
      linky[y][u] = x;
    } else {
      linkx[x][u] = y;
      if (linky[y][u] != -1) {
        dfs(y, u, v, 1);
      }
      linky[y][u] = x;
    }
  }
  for (int i = 1; i <= a; i++) {
    for (int j = 1; j <= a || j <= b; j++) {
      if (linkx[i][j] != -1) {
        ans[id[i][linkx[i][j]]] = j;
        mx = max(mx, j);
      }
    }
  }
  printf("%d\n", mx);
  for (int i = 1; i <= m; i++) {
    printf("%d ", ans[i]);
  }
  return 0;
}
