#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(x) (x).begin(), (x).end() #define bit(x) (1 << (x)) #define cnt1(x) (__builtin_popcount(x)) #define LB lower_bound #define LET(it,v) __typeof(v) it(v) #define mset0(x) memset((x), 0, sizeof((x))) #define mset1(x) memset((x), -1, sizeof((x))) #define pb push_back #define PQ priority_queue #define REP(it,v) for(LET(it,v.begin());it!=v.end();it++) #define sqr(x) ((x)*(x)) #define sz(x) ((int)(x.size())) #define UB upper_bound #define X first #define Y second using namespace std; typedef long long LL; typedef double DB; typedef pair pii; typedef pair pll; typedef vector vi; typedef vector vpii; template inline void chkmin(T &a, T b) { if (b < a) a = b; } template inline void chkmax(T &a, T b) { if (a < b) a = b; } const int MX = 1005; vi con[MX]; int cnt[MX], dp[MX]; void DFS(int u, int pr) { dp[u] = dp[pr] + 1; cnt[dp[u]]++; for (int i = 0; i < sz(con[u]); i++) { int v = con[u][i]; if (v == pr) continue; DFS(v, u); } } int main() { int n, i, j, u, v; while (scanf("%d", &n) == 1) { for (i = 1; i <= n; i++) { con[i].clear(); cnt[i] = 0; } for (i = 1; i < n; i++) { scanf("%d%d", &u, &v); con[u].pb(v); con[v].pb(u); } DFS(1, 0); for (i = n; i > 1; i--) if (cnt[i] > 1) { for (j = i + 1; j <= n; j++) if (cnt[j]) break; if (j <= n) break; } if (i > 1) puts("NO"); else puts("YES"); } return 0; }