#include using namespace std; #define rep(i,n) for(ll i=0;i<(n);++i) using ll = long long; using pll = pair; constexpr ll INF = (1LL<<60); constexpr ll MOD = (1e9+7); //constexpr ll MOD = (998244353); template bool chmax(T &a,const T &b){if(a bool chmin(T &a,const T &b){if(a>b){a=b;return 1;}return 0;} void dump(){cout< void dump(T&& h, Ts&&... t){cout<(t)...);} template istream &operator>>(istream&is,vector&v){for(auto &elemnt:v)is>>elemnt;return is;} template istream &operator>>(istream&is,pair&p){is>>p.first>>p.second;return is;} templatevector make_vector(size_t a){return vector(a);} templateauto make_vector(size_t a, Ts... ts){return vector(ts...))>(a, make_vector(ts...));} void solve1();void solve2();void solve3(); int main(){ solve3(); return 0; } void solve3(){ ll n; cin>>n; vectordeg(n); rep(i,n-1){ ll a,b; cin>>a>>b; a--;b--; deg[a]++; deg[b]++; } ll ans = 0; rep(i,n)ans += max(0ll,deg[i]-2); cout<<(ans)<>; using weighted_edge = vector; void solve2(){ ll n;cin>>n; vector> adj(n); vector deg(n); rep(i,n-1){ ll a,b;cin>>a>>b;a--;b--; adj[a].emplace_back(b); adj[b].emplace_back(a); deg[a]++; deg[b]++; } queue que; rep(i,n){ if(deg[i]==1)que.emplace(i,-1); } vector dist(n); while(!que.empty()){ auto [now,prv] = que.front(); que.pop(); bool update = false; if(prv==-1){ dist[now] = 1; update = true; }else{ update = chmax(dist[now],dist[prv]+1); } if(!update)continue; for(auto nxt:adj[now]){ if(nxt==prv)continue; if(dist[now]+1<=dist[nxt])continue; que.emplace(nxt,now); } } ll mxv=-1,mxi=-1; rep(i,n){ if(chmax(mxv,dist[i]))mxi=i; } vector seen(mxv+1),visited(n); queue q; q.emplace(mxi); ll ans = 0; while(!q.empty()){ ll v = q.front(); q.pop(); if(visited[v])continue; visited[v]=true; if(seen[dist[v]])ans+=max(0ll,deg[v]-2); else{ seen[dist[v]] = true; ans += max(0ll,deg[v]-2); } for(auto nv:adj[v]){ if(visited[nv])continue; q.emplace(nv); } } cout<<(ans)<>n; vector> adj(n); vector deg(n); rep(i,n-1){ ll a,b; cin>>a>>b; a--;b--; adj[a].emplace_back(b); adj[b].emplace_back(a); deg[a]++; deg[b]++; } queue que; rep(i,n){ if(deg[i]==1)que.emplace(i,-1); } vector dist(n),prvs(n,-1); while(!que.empty()){ auto [now,prv] = que.front(); que.pop(); bool update = false; if(prv==-1){ dist[now] = 1; update = true; }else{ update = chmax(dist[now],dist[prv]+1); if(update)prvs[now]=prv; } if(!update)continue; for(auto nxt:adj[now]){ if(nxt==prv)continue; if(dist[now]+1<=dist[nxt])continue; que.emplace(nxt,now); } } for(auto x:dist)cout<