/* ID: espr1t LANG: C++ TASK: Demo KEYWORDS: */ #include #include #include #include #include #include #include #include #include #include #include #define MAX 32768 using namespace std; FILE *in; FILE *out; int n; vector v[MAX]; vector index[MAX]; int numColors; int color[MAX], input[MAX], vis[MAX]; int main(void) { in = stdin; out = stdout; in = fopen("tcoloring.in", "rt"); out = fopen("tcoloring.out", "wt"); fscanf(in, "%d", &n); for (int i = 1; i < n; i++) { int node1, node2; fscanf(in, "%d %d", &node1, &node2); v[node1].push_back(node2); index[node1].push_back(i); v[node2].push_back(node1); index[node2].push_back(i); } memset(color, -1, sizeof(color)); memset(input, -1, sizeof(input)); numColors = 0; for (int i = 1; i <= n; i++) numColors = max(numColors, (int)v[i].size()); queue q; memset(vis, 0, sizeof(vis)); q.push(1); vis[1] = 1; while(!q.empty()) { int node = q.front(); q.pop(); int nxtColor = 1; if (nxtColor == input[node]) nxtColor++; for (int i = 0; i < (int)v[node].size(); i++) { if (!vis[v[node][i]]) { q.push(v[node][i]); vis[v[node][i]] = 1; input[v[node][i]] = nxtColor; color[index[node][i]] = nxtColor; nxtColor++; if (nxtColor == input[node]) nxtColor++; } } } fprintf(out, "%d\n", numColors); for (int i = 1; i < n; i++) fprintf(out, "%d\n", color[i]); return 0; }