#include <bits/stdc++.h>
int oo[1 + (1000 - 1) * 2], oh[1 + (1000 - 1) * 2];
int link(int o, int h) {
  static int _ = 1;
  oo[_] = o, oh[_] = h;
  return _++;
}
int ij[1000 - 1], ww[1000 - 1];
int ae[1000], dd[1000], l1[1000], l2[1000];
void dfs1(int p, int i) {
  int o;
  l1[i] = l2[i] = i;
  for (o = ae[i]; o; o = oo[o]) {
    int h = oh[o], j = i ^ ij[h];
    if (j != p) {
      dfs1(i, j);
      if (l1[i] == i)
        l1[i] = l1[j];
      else if (l2[i] == i)
        l2[i] = l1[j];
    }
  }
}
int qu[1000 * 3 * 4], cnt;
void add2(int a, int b, int w) {
  if (a != b) {
    qu[cnt++] = a + 1;
    qu[cnt++] = b + 1;
    qu[cnt++] = w;
  }
}
void add(int a, int b, int c, int d, int w) {
  add2(a, c, w);
  add2(b, d, w);
  add2(a, b, -w);
  add2(c, d, -w);
}
void dfs2(int p, int i, int l) {
  int o;
  for (o = ae[i]; o; o = oo[o]) {
    int h = oh[o], j = i ^ ij[h];
    if (j != p) {
      add(l, l1[j] == l1[i] ? l2[i] : l1[i], l1[j], l2[j], ww[h]);
      dfs2(i, j, l);
    }
  }
}
int main() {
  int n, h, i, j, r, s, o;
  scanf("%d", &n);
  for (h = 0; h < n - 1; h++) {
    int w;
    scanf("%d%d%d", &i, &j, &w), i--, j--;
    ij[h] = i ^ j, ww[h] = w / 2;
    ae[i] = link(ae[i], h), dd[i]++;
    ae[j] = link(ae[j], h), dd[j]++;
  }
  for (i = 0; i < n; i++)
    if (dd[i] == 2) {
      printf("NO\n");
      return 0;
    }
  r = 0;
  while (dd[r] != 1) r++;
  o = ae[r], h = oh[o], s = r ^ ij[h];
  dfs1(r, s);
  add(r, r, l1[s], l2[s], ww[h]);
  dfs2(r, s, r);
  printf("YES\n");
  printf("%d\n", cnt / 3);
  while (cnt) {
    printf("%d %d %d\n", qu[cnt - 3], qu[cnt - 2], qu[cnt - 1]);
    cnt -= 3;
  }
  return 0;
}
