#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll id=1;
void dfs(ll node , vector<ll> g[] , vector<ll> &dp , vector<ll> &visited , map<vector<ll>,ll> &mpp
, vector<ll> &parent){
visited[node]=1;
for(auto it : g[node]){
if(!visited[it]){
parent[it] = node;
dfs(it , g , dp , visited,mpp,parent);
}
}
vector<ll> a;
for(auto it : g[node]){
if(it!=parent[node]){
a.push_back(dp[it]);
}
}
sort(a.begin(),a.end());
if(mpp.find(a)==mpp.end()){
mpp[a]=id;
id++;
}
dp[node] = mpp[a];
cout<<node<<" "<<dp[node]<<endl;
}
int main() {
ll n;
cin>>n;
vector<ll> g[n+1];
for(ll i=1;i<n;i++){
ll u;
ll v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
vector<ll> dp(n+1,0);
vector<ll> visited(n+1,0);
vector<ll> parent(n+1,-1);
map<vector<ll>,ll> mpp;
ll node = 1;
dfs(node, g , dp , visited , mpp ,parent);
cout<<"total number of different subtrees "<<dp[node]<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKCmxsIGlkPTE7Cgp2b2lkIGRmcyhsbCBub2RlICwgdmVjdG9yPGxsPiBnW10gLCB2ZWN0b3I8bGw+ICZkcCAsIHZlY3RvcjxsbD4gJnZpc2l0ZWQgLCBtYXA8dmVjdG9yPGxsPixsbD4gJm1wcAosIHZlY3RvcjxsbD4gJnBhcmVudCl7CgkKCXZpc2l0ZWRbbm9kZV09MTsKCQogICAgZm9yKGF1dG8gaXQgOiBnW25vZGVdKXsKCQkKCWlmKCF2aXNpdGVkW2l0XSl7CgkJcGFyZW50W2l0XSA9IG5vZGU7CgkJZGZzKGl0ICwgZyAsIGRwICwgdmlzaXRlZCxtcHAscGFyZW50KTsKCX0KfQoJCgl2ZWN0b3I8bGw+IGE7CgkKCWZvcihhdXRvIGl0IDogZ1tub2RlXSl7CglpZihpdCE9cGFyZW50W25vZGVdKXsKCQlhLnB1c2hfYmFjayhkcFtpdF0pOwoJfQoJfQoJCglzb3J0KGEuYmVnaW4oKSxhLmVuZCgpKTsKCQoJaWYobXBwLmZpbmQoYSk9PW1wcC5lbmQoKSl7CgkJbXBwW2FdPWlkOwoJCWlkKys7Cgl9CglkcFtub2RlXSA9IG1wcFthXTsKCQoJY291dDw8bm9kZTw8IiAiPDxkcFtub2RlXTw8ZW5kbDsKCQoJCn0KCmludCBtYWluKCkgewoJCglsbCBuOwoJY2luPj5uOwoJCgl2ZWN0b3I8bGw+IGdbbisxXTsKCglmb3IobGwgaT0xO2k8bjtpKyspewoJCWxsIHU7CgkJbGwgdjsKCQljaW4+PnU+PnY7CgkJZ1t1XS5wdXNoX2JhY2sodik7CgkJZ1t2XS5wdXNoX2JhY2sodSk7Cgl9CgkKCXZlY3RvcjxsbD4gZHAobisxLDApOwoJdmVjdG9yPGxsPiB2aXNpdGVkKG4rMSwwKTsKCXZlY3RvcjxsbD4gcGFyZW50KG4rMSwtMSk7CgkKCW1hcDx2ZWN0b3I8bGw+LGxsPiBtcHA7CgkKCWxsIG5vZGUgPSAxOwoJCglkZnMobm9kZSwgZyAsIGRwICwgdmlzaXRlZCAsIG1wcCAscGFyZW50KTsKCQoJY291dDw8InRvdGFsIG51bWJlciBvZiBkaWZmZXJlbnQgc3VidHJlZXMgIjw8ZHBbbm9kZV08PGVuZGw7CgkKCglyZXR1cm4gMDsKfQ==