#include <bits/stdc++.h>
using namespace std;
void die() {
  cout << "NO" << endl;
  exit(0);
}
const int limit = 1005;
struct elem {
  int u, v, val;
  elem() {}
  elem(int u, int v, int val) : u(u), v(v), val(val) {}
};
int n;
vector<pair<int, int> > g[limit];
int example[limit];
vector<elem> sol;
void precompute(int u, int p) {
  example[u] = u;
  vector<pair<int, int> > &ar = g[u];
  vector<pair<int, int> > nextar;
  for (int i = 0; i < int(ar.size()); i++) {
    int v = ar[i].first;
    if (v != p) {
      precompute(v, u);
      example[u] = example[v];
      nextar.push_back(ar[i]);
    }
  }
  ar = nextar;
}
void write(string s, vector<pair<int, int> > &v) {
  cout << s;
  for (int i = 0; i < int(v.size()); i++)
    cout << "[" << v[i].first << "," << v[i].second << "]";
  cout << endl;
}
void compute(int u, int p, int valp) {
  vector<pair<int, int> > &ar = g[u];
  if (int(ar.size()) == 0) {
    sol.push_back(elem(u, p, valp));
    return;
  }
  for (int i = 0; i < int(ar.size()); i++) {
    int v = ar[i].first;
    int val = ar[i].second;
    compute(v, p, val);
    valp -= val;
  }
  int u0 = example[ar[0].first];
  int u1 = example[ar[1].first];
  sol.push_back(elem(u0, p, valp / 2));
  sol.push_back(elem(u1, p, valp / 2));
  sol.push_back(elem(u0, u1, -valp / 2));
}
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int u, v, val;
    cin >> u >> v >> val;
    g[u].push_back(pair<int, int>(v, val));
    g[v].push_back(pair<int, int>(u, val));
  }
  for (int u = 1; u <= n; u++) {
    if (int(g[u].size()) == 2) {
      cout << "NO" << endl;
      exit(0);
    }
  }
  precompute(1, 0);
  vector<pair<int, int> > &ar = g[1];
  if (int(ar.size()) == 1) {
    compute(ar[0].first, 1, ar[0].second);
  } else {
    int u = ar[0].first;
    int u0 = example[u];
    int valu = ar[0].second;
    int sum = 0;
    for (int i = 1; i < int(ar.size()); i++) {
      int v = ar[i].first;
      int valv = ar[i].second;
      compute(v, u0, valv);
      sum += valv;
    }
    int u1 = example[ar[1].first];
    int u2 = example[ar[2].first];
    compute(u, u1, valu);
    sol.push_back(elem(u2, u1, -valu));
    sol.push_back(elem(u2, u0, -sum));
    sol.push_back(elem(u2, u1, (valu + sum) / 2));
    sol.push_back(elem(u2, u0, (valu + sum) / 2));
    sol.push_back(elem(u0, u1, -(valu + sum) / 2));
  }
  cout << "YES" << endl;
  cout << int(sol.size()) << endl;
  for (int i = 0; i < int(sol.size()); i++) {
    elem &e = sol[i];
    cout << e.u << " " << e.v << " " << e.val << endl;
  }
}
