#include <bits/stdc++.h>
using namespace std;
long long const INF = 2147483647, R_INF = 9223372036854775807, MOD = 1e9 + 7;
const int N = 1e3 + 5, M = 1e5 + 5;
int adj[N][N * 2], used[N * 2][N], ans[M];
void dfs(int x, int y, int c1, int c2) {
  int w = used[y][c1];
  used[x][c1] = y, used[y][c1] = x;
  used[y][c2] = 0;
  if (w) dfs(y, w, c2, c1);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int a, b, m;
  cin >> a >> b >> m;
  int maxi = 0;
  for (int i = (0); i < (m); i++) {
    int x, y;
    cin >> x >> y;
    y += a;
    adj[x][y] = i;
    int c1 = 1, c2 = 1;
    while (used[x][c1]) c1++;
    while (used[y][c2]) c2++;
    if (c1 == c2)
      used[x][c1] = y, used[y][c1] = x;
    else
      dfs(x, y, c1, c2);
    maxi = max(maxi, max(c1, c2));
  }
  for (int i = (1); i < (a + 1); i++)
    for (int j = (1); j < (maxi + 1); j++)
      if (used[i][j]) ans[adj[i][used[i][j]]] = j;
  cout << maxi << endl;
  for (int i = (0); i < (m); i++) {
    cout << ans[i] << " ";
  }
}
