#include #include #include #include #include using namespace std; class Node{ public: std::vector nodes; std::vector edges; }; vector edges; vector nodes; int N; int getMinPssible(Node* current) { int minPossible = 1; for(int k = 1; k <= 10000; k++){ for(int i = 0; i < current->edges.size(); i++){ if ( *(current->edges[i]) == k ){ goto next; } } minPossible = k; break; next: ; } return minPossible; } int solve(Node* parent, Node* current) { int maxUsedColor = 0; for(int i = 0; i < current->nodes.size(); i++){ if ( current->nodes[i] != parent ){ int minPossible = getMinPssible(current); *(current->edges[i]) = minPossible ; maxUsedColor = std::max(maxUsedColor, minPossible); maxUsedColor = std::max(maxUsedColor, solve(current, current->nodes[i])); } } return maxUsedColor; } int main() { ifstream in("tcoloring.in"); in >> N; nodes.resize(N+1); edges.resize(N-1); for(int i = 0; i < N-1; i++){ int A,B; in >> A >> B; edges[i] = 0; nodes[A].nodes.push_back(&nodes[B]); nodes[B].nodes.push_back(&nodes[A]); nodes[A].edges.push_back(&edges[i]); nodes[B].edges.push_back(&edges[i]); } int maxUsed = solve(0, &nodes[1]); ofstream out("tcoloring.out"); out << maxUsed << endl; for(int i = 0; i < edges.size(); i++){ out << edges[i] << endl; } return 0; }