#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int n, m, k;
int eid[maxn][maxn + maxn];
int eto[maxn + maxn][maxn];
int ans[maxn * maxn];
void dfs(int u, int v, int c1, int c2) {
  int to = eto[v][c1];
  eto[u][c1] = v;
  eto[v][c1] = u;
  if (to == 0) {
    eto[v][c2] = 0;
    return;
  }
  dfs(v, to, c2, c1);
}
int main() {
  memset(ans, 0, sizeof ans);
  memset(eto, 0, sizeof eto);
  memset(eid, -1, sizeof eid);
  int maxdeg = 0;
  cin >> n >> m >> k;
  for (int i = 0; i < k; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    v += n;
    eid[u][v] = i;
    int c1 = 1, c2 = 1;
    while (eto[u][c1]) c1++;
    while (eto[v][c2]) c2++;
    maxdeg = max(maxdeg, max(c1, c2));
    if (c1 == c2)
      eto[u][c1] = v, eto[v][c1] = u;
    else
      dfs(u, v, c1, c2);
  }
  cout << maxdeg << endl;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= maxdeg; j++) {
      int to = eto[i][j];
      if (to == 0) continue;
      ans[eid[i][to]] = j;
    }
  }
  for (int i = 0; i < k; i++) printf("%d ", ans[i]);
  return 0;
}
