func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1005;   const int MAXM = 1e5 + 5;   struct EC {     vector<pair<int, int> > has[2][MAXN];     int deg[2][MAXN], color[MAXM], c[2];     void prep(int d) {       for (int i = 0; i < 2; i++)         for (int j = 0; j < MAXN; j++) has[i][j].resize(d + 1, {0, 0});     }     void dfs(int x, int p) {       auto i = has[p][x][c[!p]];       if (has[!p][i.first][c[p]].second)         dfs(i.first, !p);       else         has[!p][i.first][c[!p]] = {0, 0};       has[p][x][c[p]] = i, has[!p][i.first][c[p]] = {x, i.second};       color[i.second] = c[p];     }     int solve(vector<pair<int, int> > &e, vector<int> &res) {       int m = ((int)e.size()), ans = 0;       for (int i = 0; i < m; i++)         ans = max({ans, ++deg[0][e[i].first + 1], ++deg[1][e[i].second + 1]});       prep(ans);       for (int i = 0; i < m; i++) {         int x[2] = {e[i].first + 1, e[i].second + 1};         for (int d = 0; d < 2; d++)           for (c[d] = 1; has[d][x[d]][c[d]].second; c[d]++)             ;         if (c[0] != c[1]) dfs(x[1], 1);         for (int d = 0; d < 2; d++) has[d][x[d]][c[0]] = {x[!d], i + 1};         color[i + 1] = c[0];       }       res.resize(m);       for (int i = 0; i < m; i++) res[i] = color[i + 1];       return ans;     }   } ec;   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int a, b, m;     cin >> a >> b >> m;     vector<pair<int, int> > e;     for (int i = 0; i < m; i++) {       int x, y;       cin >> x >> y;       e.push_back({x - 1, y - 1});     }     vector<int> res;     cout << ec.solve(e, res) <<   n ;     for (auto x : res) cout << x <<    ;     cout <<   n ;     return 0;   }   