#include <bits/stdc++.h>
using namespace std;
int a, b, n;
const int N = 100005;
const int P = 2005;
int ans = 0, cnt;
int rd[P];
int X[N], Y[N];
int color[P][P];
int answer[P][P];
int nt[P][P];
int main() {
  scanf("%d%d%d", &a, &b, &n);
  for (int i = 1; i <= n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    y += a;
    X[i] = x, Y[i] = y;
    rd[x]++, rd[y]++;
    ans = max(ans, rd[x]);
    ans = max(ans, rd[y]);
  }
  cout << ans << endl;
  for (int i = 1; i <= n; i++) {
    int x = X[i], y = Y[i];
    int l = 1, r = 1;
    for (; l <= ans; l++)
      if (!nt[x][l]) break;
    for (; r <= ans; r++)
      if (!nt[y][r]) break;
    nt[x][l] = y;
    nt[y][r] = x;
    if (l == r) continue;
    for (int c = l, j = x; j; j = nt[j][c], c ^= (l ^ r))
      swap(nt[j][l], nt[j][r]);
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= ans; j++)
      if (nt[X[i]][j] == Y[i]) {
        printf("%d ", j);
        break;
      }
  }
  return 0;
}
