// #include C { #include #include #include #include #include // } // #include C++ { #include #include #include #include #include #include #include #include #include #include #include #include #include // } using namespace std; // #typedef { typedef long long int64; typedef pair PII; typedef pair PLL; // } // #parameter{ #ifdef DEBUG_MODE #define TYPE decltype #define RF(filename) {freopen((filename), "r", stdin);} #define WF(filename) {freopen((filename), "w", stdout);} #define DF(filename) {freopen((filename), "w", stderr);} #define eprintf printf #else #define TYPE __typeof #define RF(filename) {;} #define WF(filename) {;} #define DF(filename) {;} #define eprintf(...) #endif // #define { #define SZ(a) ((int)(a).size()) #define X first #define Y second #define MP make_pair #define L(x) ((x)<<1) #define R(x) ((x)<<1 | 1) #define max3(x, y, z) (max(max((x), (y)), (z))) #define min3(x, y, z) (min(min((x), (y)), (z))) #define BIT(x, i) (((x) >> (i)) & 1) #define ALL(it) (it).begin(), (it).end() #define FILL(__space, __val) memset(__space, __val, sizeof(__space)) #define MOVE(__spaceTo, __spaceFrom) memmove(__spaceTo, __spaceFrom, sizeof(__spaceTo)) #define UNIQUE(__vector) sort(ALL(__vector)), __vector.resize(unique(ALL(__vector)) - __vector.begin()) #define FOR(it, c) for( TYPE((c).begin()) it = (c).begin(); it != (c).end(); it++) ///////////////////////////////////////////////////////////// const double PI = acos(-1.0); const double EPS = 1e-6; #define MAX_N 1005 #define MAX_M 5005 #define MOD (int)(1e9+7) #define INF ((1 << 30) - 1) #define BINF ((1LL << 62) - 1LL) #define NONE -1 #define NIL 0 // } ///////////////////////////////////////////////////////////// vector G[MAX_N]; int cnt[MAX_N]; void Init(){ for (int i = 0; i < MAX_N; i++) G[i].clear(); FILL(cnt, 0); } void DFS(int depth, int u, int father){ cnt[depth]++; FOR(itr, G[u]) if (*itr != father){ DFS(depth + 1, *itr, u); } } ///////////////////////////////////////////////////////////// int main(){ RF("input.txt"); // WF("output.txt"); DF("err.txt"); int N; while (~scanf("%d", &N)){ Init(); for (int i = 1; i < N; i++){ int a, b; scanf("%d %d", &a, &b); G[a].push_back(b); G[b].push_back(a); } DFS(0, 1, 1); int maxx = 0; for (int k = MAX_N - 1; k >= 0; k--) if (cnt[k] > 0){ maxx = k; break; } bool ok = true; for (int k = maxx - 1; k >= 0; k--) ok &= cnt[k] == 1; puts(ok ? "YES" : "NO"); } return 0; }