#include using namespace std; typedef long long ll; void solve() { int N; cin >> N; vector> tree(N); vector deg(N); for (int i = 0; i < N - 1; i++) { int u, v; cin >> u >> v; u--, v--; tree[u].push_back(v); tree[v].push_back(u); deg[u]++; deg[v]++; } priority_queue> Q; for (int i = 0; i < N; i++) { if (deg[i] == 1) { Q.emplace(-deg[i], i); } } vector> moves(N); vector cnt(N, 1); for (int i = 0; i < N; i++) { int u = Q.top().second; Q.pop(); sort(moves[u].begin(), moves[u].end()); for (int c : moves[u]) { // cout << "cnt[" << u+1 << "] += " << c << endl; if (c > cnt[u]) { cout << "NO\n"; return; } cnt[u] += c; } for (int v : tree[u]) { if (cnt[v] != 0) { moves[v].push_back(cnt[u]); cnt[u] = 0; deg[v]--; // cout << u+1 << " -> " << v+1 << " " << deg[v] << endl; if (deg[v] == 1) { Q.emplace(-accumulate(moves[v].begin(), moves[v].end(), 1ll), v); } } } } cout << "YES\n"; } int main() { ios::sync_with_stdio(false); int T = 1; // cin >> T; for (int i = 1; i <= T; i++) { solve(); } return 0; }