func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, k, ta, tb, i, ans[100005], tc, ca[2][1005];   vector<int> va[2][1005], vb[2], ve;   int main() {     scanf( %d%d%d , &n, &m, &k);     for (int a = 0; a < k; a++) {       scanf( %d%d , &ta, &tb);       ta--;       tb--;       vb[0].push_back(ta);       vb[1].push_back(tb);       ca[0][ta]++;       ca[1][tb]++;       ans[a] = -1;     }     for (int a = 0; a < n; a++) i = max(i, ca[0][a]);     for (int a = 0; a < m; a++) i = max(i, ca[1][a]);     for (int a = 0; a < n; a++)       for (int b = 0; b < i; b++) va[0][a].push_back(-1);     for (int a = 0; a < m; a++)       for (int b = 0; b < i; b++) va[1][a].push_back(-1);     for (int a = 0; a < k; a++) {       tc = -1;       ta = -1;       tb = -1;       for (int c = 0; c < i; c++) {         if (va[0][vb[0][a]][c] == -1 && va[1][vb[1][a]][c] == -1) {           tc = c;           break;         } else if (va[1][vb[1][a]][c] == -1)           ta = c;         else if (va[0][vb[0][a]][c] == -1)           tb = c;       }       if (tc != -1) tb = tc;       ve.clear();       ve.push_back(a);       while (1) {         tc = va[ve.size() % 2][vb[ve.size() % 2][ve.back()]]                [(ve.size() & 1) ? tb : ta];         if (tc == -1) break;         ve.push_back(tc);       }       for (int c = 0; c < ve.size(); c++)         if (ans[ve[c]] != -1) {           va[c % 2][vb[c % 2][ve[c]]][ans[ve[c]]] = -1;           va[1 - c % 2][vb[1 - c % 2][ve[c]]][ans[ve[c]]] = -1;         }       for (int c = 0; c < ve.size(); c++) {         ans[ve[c]] = (c & 1) ? ta : tb;         va[c % 2][vb[c % 2][ve[c]]][(c & 1) ? ta : tb] = ve[c];         va[1 - c % 2][vb[1 - c % 2][ve[c]]][(c & 1) ? ta : tb] = ve[c];       }     }     printf( %d n , i);     for (int a = 0; a < k; a++)       printf( %d%c , ans[a] + 1, a == k - 1 ?   n  :    );     return 0;   }   