#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]++; } vector q; for (int i = 0; i < n; i++) if (degree[i] == 1) q.push_back(i); for (int t = 0; t < (int)q.size(); t++) { int node = q[t]; // node is a leaf, try to push up int next_node = -1; for (auto i : adj[node]) if (alive[i]) next_node = i; // try to push if (next_node != -1 && elems_in_node[next_node] >= elems_in_node[node]) { elems_in_node[next_node] += elems_in_node[node]; elems_in_node[node] = 0; degree[next_node]--; if (degree[next_node] == 1) q.push_back(next_node); } // die alive[node] = 0; } int nr_non_0 = 0; for (int i = 0; i < n; i++) nr_non_0 += (elems_in_node[i] > 0); cout << (nr_non_0 == 1 ? "YES\n" : "NO\n"); }