#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
int n, m, k;
int I[N][N];
int c[2][N][N];
void dfs(int u, int x, int y, int c1, int c2) {
  if (c1 == c2)
    c[u][x][c1] = y, c[u ^ 1][y][c1] = x;
  else {
    int t = c[u ^ 1][y][c1];
    c[u][x][c1] = y, c[u ^ 1][y][c1] = x;
    if (t == 0) {
      c[u ^ 1][y][c2] = 0;
    } else
      dfs(u ^ 1, y, t, c2, c1);
  }
}
int ans[(int)1e5 + 5];
int main() {
  cin >> n >> m >> k;
  int C = 0;
  for (int i = 1; i <= k; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    I[x][y] = i;
    int c1 = 1, c2 = 1;
    while (c[0][x][c1]) c1++;
    while (c[1][y][c2]) c2++;
    dfs(0, x, y, c1, c2);
    C = max(C, max(c1, c2));
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= C; j++) {
      if (c[0][i][j]) {
        int v = c[0][i][j];
        ans[I[i][v]] = j;
      }
    }
  cout << C << endl;
  for (int i = 1; i <= k; i++) printf("%d ", ans[i]);
  printf("\n");
  return 0;
}
