#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
using pi3 = pair<pii, int>;
using VI = vector<int>;
const int N = 1e3 + 1;
int n;
vector<pii> a[N];
void change(int u, int b, int c = 0) {
  for (auto& v : a[u])
    if (v.first == b) {
      if (c)
        v.first = c;
      else {
        swap(v, a[u].back());
        a[u].pop_back();
      }
      break;
    }
}
int pa[N];
void Find(int u, int fa = 0) {
  pa[u] = fa;
  for (auto v : a[u])
    if (v.first != fa) Find(v.first, u);
}
void Add(int u, int v, int d) {
  Find(u);
  for (; v != u; v = pa[v]) {
    for (auto& r : a[v])
      if (r.first == pa[v]) r.second += d;
  }
}
void add(int u, int v, int d) {
  Add(u, v, d);
  Add(v, u, d);
}
int col[N];
void Paint(int u, int fa, int f) {
  col[u] = f;
  for (auto r : a[u])
    if (r.first != fa) Paint(r.first, u, f);
}
void Clear() {
  for (int ok = 0, u, v, w; ok == 0;)
    for (int i = ok = 1; i <= n; i++)
      if (a[i].size() == 2) {
        u = a[i][0].first;
        v = a[i][1].first;
        change(u, i, v);
        change(v, i, u);
        a[i].clear();
        ok = 0;
        break;
      }
}
void put() {
  for (int i = 1; i <= n; i++)
    for (auto r : a[i])
      cout << i << "  ->  " << r.first << ' ' << r.second << endl;
}
int main() {
  scanf("%d", &n);
  for (int i = 1, u, v, w; i < n; i++) {
    scanf("%d %d %d", &u, &v, &w);
    a[u].emplace_back(v, w);
    a[v].emplace_back(u, w);
  }
  for (int i = 1; i <= n; i++)
    if (a[i].size() == 2 && a[i][0].second != a[i][1].second)
      return puts("NO"), 0;
  Clear();
  vector<pi3> op;
  for (int u, v, w, t, r, cu, ct, cw, A, B;;) {
    VI leaf;
    for (int i = 1; i <= n; i++)
      if (a[i].size() == 1) leaf.emplace_back(i);
    if (leaf.size() == 2) {
      u = leaf[0];
      v = leaf[1];
      w = a[u][0].second;
      op.emplace_back(pi3({u, v}, w));
      break;
    }
    u = leaf[0];
    v = a[u][0].first;
    if (a[v].size() > 3) {
      w = leaf[1];
      op.emplace_back(pi3({u, w}, a[u][0].second));
      add(u, w, -a[u][0].second);
      change(v, u);
      a[u].clear();
      continue;
    }
    for (int i = 0; i < 3; i++) Paint(a[v][i].first, v, i);
    for (int i = 1; i <= n; i++)
      if (a[i].size() == 1 && col[i] != col[u]) {
        w = i;
        break;
      }
    for (int i = 1; i <= n; i++)
      if (a[i].size() == 1 && col[i] != col[u] && col[i] != col[w]) {
        t = i;
        break;
      }
    cu = a[v][col[u]].second;
    cw = a[v][col[w]].second;
    ct = a[v][col[t]].second;
    A = (cu + ct - cw) / 2;
    B = (cu - ct + cw) / 2;
    op.emplace_back(pi3(pii(u, w), B));
    add(u, w, -B);
    op.emplace_back(pi3(pii(u, t), A));
    add(u, t, -A);
    change(v, u);
    a[u].clear();
    Clear();
  }
  puts("YES");
  printf("%d\n", op.size());
  for (auto& r : op)
    printf("%d %d %d\n", r.first.first, r.first.second, r.second);
  return 0;
}
