#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair pii; #define PB push_back #define MP make_pair #define FOR(prom, a, b) for(int prom = (a); prom < (b); prom++) #define FORD(prom, a, b) for(int prom = (a); prom > (b); prom--) #define FORDE(prom, a, b) for(int prom = (a); prom >= (b); prom--) #define R1(a) do{scanf("%d", &(a));}while(0) #define R2(a, b) do{scanf("%d%d", &(a), &(b));}while(0) #define R3(a, b, c) do{scanf("%d%d%d", &(a), &(b), &(c));}while(0) #define SV(vec) do{int s_v_;scanf("%d", &(s_v_));vec.PB(s_v_);}while(0) #define MM(co, cim) memset((co), (cim), sizeof((co))) #define DEB(x) cerr << ">>> " << #x << " : " << x << endl; #define INF 1000000007 int n, from, to, res; set g[300014]; void disc (int from, int to) { g[from].erase(to); g[to].erase(from); } void conn (int from, int to) { g[from].insert(to); g[to].insert(from); } int find_leaf (int from) { FOR(i, 0, n) if (!g[from].count(i) && g[i].size() == 1) return i; return -1; } int main () { R1(n); FOR(i, 0, n - 1) { R2(from, to); --from; --to; conn(from, to); } res = 0; FOR(i, 0, n) if (g[i].size() > 2) { vector tmp; for (auto it = g[i].begin(); it != g[i].end(); ++it) tmp.PB(*it); FOR(j, 2, tmp.size()) { int y = find_leaf(tmp[j]); disc(i, tmp[j]); conn(tmp[j], y); ++res; } } printf("%d\n", res); return 0; }