#include <bits/stdc++.h>
using namespace std;
inline int rd() {
  int v = 0;
  char c = getchar();
  bool flag = false;
  while (c < '0' || c > '9') flag |= (c == '-'), c = getchar();
  while ('0' <= c && c <= '9')
    v = (v << 1) + (v << 3) + (c ^ 48), c = getchar();
  return flag ? -v : v;
}
int const maxn = 2e3 + 5, maxm = 2e5 + 5;
int a, b, m, ans;
int u[maxm], v[maxm], de[maxn], co[maxn][maxn];
int main() {
  a = rd(), b = rd(), m = rd();
  for (int i = 1; i <= m; i++)
    u[i] = rd(), v[i] = rd() + a, de[u[i]]++, de[v[i]]++;
  for (int i = 1; i <= a + b; i++) ans = max(ans, de[i]);
  for (int i = 1; i <= m; i++) {
    int c1, c2;
    for (c1 = 1; c1 <= ans; c1++)
      if (!co[u[i]][c1]) break;
    for (c2 = 1; c2 <= ans; c2++)
      if (!co[v[i]][c2]) break;
    co[u[i]][c1] = v[i], co[v[i]][c2] = u[i];
    if (c1 == c2) continue;
    for (int c0 = c2, x = v[i]; x; x = co[x][c0], c0 ^= c1 ^ c2)
      swap(co[x][c1], co[x][c2]);
  }
  cout << ans << endl;
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= ans; j++)
      if (co[u[i]][j] == v[i]) {
        cout << j << ' ';
        break;
      }
  return 0;
}
