#include <bits/stdc++.h>
using namespace std;
const long long maxx = 100000 + 7;
const long long maxn = 1000 + 7;
const long long mod = 998244353;
const long long maxs = 5 * (1E5) + 7;
const long long maxm = 30000 + 7;
const long long maxk = 800 + 7;
const long long maxw = 100 + 7;
const long long maxh = 100 + 7;
const long long inf = 1e9 + 7;
ostream& operator<<(ostream& os, pair<long long, long long>& rhs) {
  os << rhs.first << " " << rhs.second << endl;
  return os;
}
long long qw(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans *= a;
    b /= 2;
    a = a * a;
  }
  return ans;
}
vector<long long> ed[maxn];
long long n;
long long we[maxn][maxn];
void init() {
  cin >> n;
  for (long long i = (2); i <= (n); i++) {
    long long u, v, w;
    cin >> u >> v >> w;
    if (u < v) swap(u, v);
    ed[u].push_back(v);
    ed[v].push_back(u);
    we[u][v] = w;
  }
}
long long ans[maxn][maxn];
vector<long long> tv;
vector<pair<pair<long long, long long>, long long> > ras;
void dfs(long long son, long long fa) {
  if (ed[son].size() == 1)
    tv.push_back(son);
  else {
    for (int i = 0; i < ed[son].size(); i++) {
      long long gg = ed[son][i];
      if (gg != fa) dfs(gg, son);
    }
  }
}
void aid(long long x, long long y, long long w) { ras.push_back({{x, y}, w}); }
void solve() {
  for (long long i = (1); i <= (n); i++) {
    if (ed[i].size() == 2) {
      cout << "NO\n";
      return;
    }
  }
  for (long long u = (1); u <= (n); u++) {
    for (long long v : ed[u]) {
      if (u > v) {
        tv.clear();
        dfs(v, u);
        long long x1 = *tv.begin();
        long long x2 = *(--tv.end());
        tv.clear();
        dfs(u, v);
        long long y1 = *tv.begin();
        long long y2 = *(--tv.end());
        long long xx = we[u][v];
        aid(x1, y1, xx / 2);
        aid(x2, y2, xx / 2);
        if (x1 != x2) aid(x1, x2, (-xx / 2));
        if (y1 != y2) aid(y1, y2, (-xx / 2));
      }
    }
  }
  cout << "YES\n";
  cout << ras.size() << endl;
  for (long long i = (0); i < (ras.size()); i++)
    cout << ras[i].first.first << " " << ras[i].first.second << " "
         << ras[i].second << endl;
}
int main(void) {
  init();
  solve();
  return 0;
}
