#include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector > adj(n); vector degree(n), alive(n, 1); vector elems_in_node(n, 1); for (int i = 1; i < n; i++) { int a, b; cin >> a >> b; a--, b--; adj[a].push_back(b); adj[b].push_back(a); degree[a]++, degree[b]++; } // { value, from } vector >> to_add(n); vector q; int nodes_alive = n; auto Improve = [&](int node) { while (!to_add[node].empty() && to_add[node].begin()->first <= elems_in_node[node]) { int from = to_add[node].begin()->second; elems_in_node[node] += elems_in_node[from]; elems_in_node[from] = 0; alive[from] = 0; nodes_alive--; degree[from]--, degree[node]--; to_add[node].erase(to_add[node].begin()); } if (degree[node] == 1) { int to = -1; for (auto i : adj[node]) if (alive[i]) to = i; assert(to != -1); to_add[to].insert({ elems_in_node[node], node }); q.push_back(to); } }; for (int i = 0; i < n; i++) Improve(i); for (int t = 0; t < (int)q.size(); t++) { Improve(q[t]); } cout << (nodes_alive == 1 ? "YES\n" : "NO\n"); }