#define _CRT_SECURE_NO_DEPRECATE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#define all(v) v.begin(),v.end() using namespace std; //typedef long long ll; //typedef unsigned long long ull; //typedef long double ld; //const ld epsylon = 1e-9; //typedef unsigned int ui; //inline long double get_time(){ // return (long double)clock()/CLOCKS_PER_SEC; //}; //ld start_time,end_time; int n, tree[10001][10001], colors, razklon[10001]; bool more(); int main() { freopen("tcoloring.in","r",stdin); freopen("tcoloring.out","w",stdout); //start_time = get_time(); //program memset(tree, 0, sizeof(tree)); memset(razklon, 0, sizeof(razklon)); scanf("%d", &n); int from, to; int maxrazk = 0; for (int i = 0; i < n - 1; ++i) { scanf("%d %d", &from, &to); tree[from][to]++; razklon[i]++; maxrazk = max(razklon[i], maxrazk); } colors = maxrazk; if (more()) { colors++; } printf("%d\n",colors); int k = 0; for(int i = 1; i <= n; ++i) { k = 1; for (int j = 1; j <= n; j++) { if (tree[i][j]) { if (i == 1) tree[i][j] = k++; else if (i % 2 == 0 && k == 1) {tree[i][j] = 2; k = 2; printf("%d\n",tree[i][j]);} else if (i % 2 == 0 && k != 1) {tree[i][j] = tree[i][j] = k-1; k++; printf("%d\n",tree[i][j]);} else if (i % 2 && k == 1) {tree[i][j] = 1; k = 1; printf("%d\n",tree[i][j]);} else if (i % 2 && k != 1) {tree[i][j] = ++k; printf("%d\n",tree[i][j]);} } } } //end program //end_time=get_time()-start_time; return 0; } bool more(){ int cnt = 0, red = 0;bool first = true; for (int i = 1; i <= n; ++i) { if (first) { if (razklon[i] == colors) {cnt++; red = i; first = false; continue;} } if (razklon[i] == colors && red == i-1) {cnt++; red = i;} else if (razklon[i] == colors) {red = i;} } if (cnt > 1) return true; else return false; }