#include <bits/stdc++.h>
using namespace std;
int a, b, m, ans;
int g[1010][1010];
int f[2][1010][1010], c[1000010];
void dfs(int a, int b, int x, int y, int now, int pre) {
  int to = f[b][y][now];
  f[a][x][now] = y, f[b][y][now] = x;
  if (!to)
    f[b][y][pre] = 0;
  else
    dfs(b, a, y, to, pre, now);
}
int main() {
  cin >> a >> b >> m;
  for (int i = 1, u, v, t0, t1; i <= m; i++) {
    cin >> u >> v;
    g[u][v] = i;
    t0 = t1 = 1;
    while (f[1][v][t1]) t1++;
    while (f[0][u][t0]) t0++;
    ans = max(ans, max(t0, t1));
    if (t0 == t1) {
      f[0][u][t0] = v;
      f[1][v][t0] = u;
    } else
      dfs(0, 1, u, v, t0, t1);
  }
  for (int i = 1; i <= a; i++)
    for (int j = 1; j <= ans; j++)
      if (f[0][i][j]) c[g[i][f[0][i][j]]] = j;
  cout << ans << endl;
  for (int i = 1; i <= m; i++) cout << c[i] << ' ';
  puts("");
}
