#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int INF = 2e9;
const int MOD = 1e9 + 7;
const int MB = 20;
vector<vector<pair<int, int>>> q;
vector<int> col;
void rec(int c1, int c2, int v, int u, int num) {
  if (q[v][c1].first == -1) {
    q[v][c1] = {u, num};
    col[num] = c1;
    return;
  }
  auto p = q[v][c1];
  col[p.second] = c2;
  q[v][c2] = p;
  q[v][c1] = {u, num};
  q[p.first][c1] = {-1, -1};
  rec(c2, c1, p.first, v, p.second);
}
void solve() {
  int a, b, m;
  cin >> a >> b >> m;
  int n = a + b;
  vector<int> deg(n);
  vector<pair<int, int>> edges(m);
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    y += a;
    edges[i] = {x, y};
    deg[x]++;
    deg[y]++;
  }
  int mx = *max_element(deg.begin(), deg.end());
  col.resize(m);
  q.resize(n, vector<pair<int, int>>(mx, {-1, -1}));
  for (int i = 0; i < m; i++) {
    int x = edges[i].first;
    int y = edges[i].second;
    int c1 = -1, c2 = -1;
    for (int j = 0; j < mx; j++) {
      if (q[x][j].first == -1 && q[y][j].first == -1) {
        c1 = j;
        c2 = j;
        break;
      }
      if (q[x][j].first == -1) {
        c1 = j;
      }
      if (q[y][j].first == -1) {
        c2 = j;
      }
    }
    if (c2 == c1) {
      q[x][c1] = {y, i};
      q[y][c1] = {x, i};
      col[i] = c1;
      continue;
    }
    col[i] = c1;
    q[x][c1] = {y, i};
    rec(c1, c2, y, x, i);
  }
  cout << mx << '\n';
  for (int i : col) cout << (i + 1) << " ";
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cout.precision(12);
  solve();
}
