#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> dp;
ll id;
map<vector<ll>,ll> mp;
void dfs(ll node,vector<ll>& vis,vector<vector<ll>>& adj,vector<ll>& parent){
   vis[node]=1;
        for (auto u :adj[node]) {
        if (vis[u]==0) {
            parent[u]=node;
            dfs(u,vis,adj,parent);
        } 
    }
    vector<ll> a; 
    for (auto u :adj[node]) {
        if (u != parent[node]) {
            a.push_back(dp[u]);
        }
    }
    if (!a.empty()) {
        sort(a.begin(), a.end()); 
    }
    if (mp.find(a)==mp.end()) {
        mp[a]=id;
        dp[node]=id; 
        id++; 
    } else {
        dp[node]=mp[a];
    }
}


int main() {
	// your code goes here
	id=1;
    ll n;
    cin>>n;
    dp.assign(n+1,0); 
    vector<vector<ll>> adj(n+1); 
    for (ll i=1;i<=n-1;i++) {
        ll u,v;
        cin>>u>>v; 
        adj[u].push_back(v); 
        adj[v].push_back(u); 
    }
    vector<ll> vis(n+1,0); 
    vector<ll> parent(n+1,0); 
    parent[1]=-1; 
    
    dfs(1,vis,adj,parent);
    cout<<mp.size();
	return 0;
}