#include <bits/stdc++.h>
using namespace std;
pair<int, int> e[100001];
int cnt[1001], ecnt[2001];
map<pair<int, int>, int> mp;
int ec[2001][1001];
void dfs(int x, int c, int cs) {
  if (ec[x][c] != 0) {
    int it = ec[x][c];
    dfs(it, cs - c, cs);
    ec[it][cs - c] = x;
    ec[x][cs - c] = it;
  } else {
    ec[x][cs - c] = 0;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int a, b, m;
  cin >> a >> b >> m;
  int ans = 0;
  for (int i = 1; i <= m; i++) {
    cin >> e[i].first >> e[i].second;
    e[i].second += a;
    ecnt[e[i].first]++;
    ecnt[e[i].second]++;
  }
  for (int i = 1; i <= a + b; i++) ans = max(ans, ecnt[i]);
  for (int i = 1; i <= m; i++) {
    int u = e[i].first, v = e[i].second, c1, c2;
    for (int j = 1; j <= ans; j++) cnt[j] = 0;
    for (int j = 1; j <= ans; j++)
      if (ec[u][j] != 0) cnt[j] += 1;
    for (int j = 1; j <= ans; j++)
      if (ec[v][j] != 0) cnt[j] += 2;
    bool ok = false;
    for (int j = 1; j <= ans; j++)
      if (!cnt[j]) {
        ec[u][j] = v;
        ec[v][j] = u;
        ok = true;
        break;
      }
    if (ok) continue;
    for (int j = 1; j <= ans; j++)
      if (cnt[j] == 1) {
        c1 = j;
        break;
      }
    for (int j = 1; j <= ans; j++)
      if (cnt[j] == 2) {
        c2 = j;
        break;
      }
    dfs(u, c1, c1 + c2);
    ec[u][c1] = v;
    ec[v][c1] = u;
  }
  for (int i = 1; i <= a; i++)
    for (int j = 1; j <= ans; j++)
      if (ec[i][j]) mp[make_pair(i, ec[i][j])] = j;
  cout << ans << '\n';
  for (int i = 1; i <= m; i++) cout << mp[e[i]] << ' ';
  cout << endl;
}
