#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > edge;
int N, M, m, g[2010][1010], res[2010][2010], deg[2010];
void uncolor(int u, int v, int c) { g[u][c] = g[v][c] = 0; }
void color(int u, int v, int c) {
  g[u][c] = v;
  g[v][c] = u;
  res[u][v] = c;
}
void recolor(int u, int v, int c1, int c2) {
  uncolor(u, v, c1);
  if (g[v][c2]) {
    int uu = g[v][c2];
    recolor(uu, v, c2, c1);
    color(u, v, c2);
  } else if (g[u][c2]) {
    int vv = g[u][c2];
    recolor(u, vv, c2, c1);
    color(u, v, c2);
  } else
    color(u, v, c2);
}
int main() {
  ios::sync_with_stdio(0);
  cin >> N >> M >> m;
  int re = 0;
  for (int i = (1), _b = (m); i <= _b; i++) {
    int u, v;
    cin >> u >> v;
    v += N;
    deg[u]++;
    deg[v]++;
    re = max(re, max(deg[u], deg[v]));
    edge.push_back(pair<int, int>(u, v));
  }
  cout << re << endl;
  for (int i = (0), _b = (m - 1); i <= _b; i++) {
    int u = edge[i].first;
    int v = edge[i].second;
    int flag = 0;
    for (int j = (1), _b = (re); j <= _b; j++)
      if (!g[u][j] && !g[v][j]) {
        color(u, v, j);
        flag = 1;
        break;
      }
    if (!flag) {
      int c1 = -1, c2 = -1;
      for (int j = (1), _b = (re); j <= _b; j++) {
        if (g[u][j] && !g[v][j]) c1 = j;
        if (!g[u][j] && g[v][j]) c2 = j;
      }
      recolor(u, g[u][c1], c1, c2);
      color(u, v, c1);
    }
  }
  for (int i = (0), _b = (m - 1); i <= _b; i++) {
    int u = edge[i].first;
    int v = edge[i].second;
    cout << res[u][v] << " ";
  }
  return 0;
}
