#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
int deg[N];
vector<int> adj[N];
int e[N][3];
int seen[N];
int dfs(int u) {
  seen[u] = true;
  if (deg[u] == 1) return u;
  for (int i = 0; i < adj[u].size(); i++)
    if (!seen[adj[u][i]]) return dfs(adj[u][i]);
}
int main() {
  int n;
  cin >> n;
  if (n == 2) {
    int x;
    cin >> x >> x >> x;
    cout << "YES\n";
    cout << 2 << "\n";
    cout << "1 2 13\n";
    cout << "1 2 " << x - 13;
    return 0;
  }
  if (n == 3) {
    cout << "NO\n";
    return 0;
  }
  for (int i = 0; i < n - 1; i++) {
    int u, v, val;
    cin >> u >> v >> val;
    u--, v--;
    deg[u]++;
    deg[v]++;
    adj[u].push_back(v);
    adj[v].push_back(u);
    e[i][0] = u;
    e[i][1] = v;
    e[i][2] = val;
  }
  for (int i = 0; i < n; i++)
    if (deg[i] == 2) {
      cout << "NO\n";
      return 0;
    }
  vector<pair<int, pair<int, int>>> ans;
  for (int i = 0; i < n - 1; i++) {
    int u, v, val;
    u = e[i][0];
    v = e[i][1];
    val = e[i][2];
    if (deg[u] == 1 || deg[v] == 1) {
      if (deg[v] == 1) swap(u, v);
      int w, z;
      memset(seen, 0, sizeof seen);
      seen[v] = true;
      vector<int> adj_temp;
      for (int i = 0; adj_temp.size() < 2; i++)
        if (adj[v][i] != u) adj_temp.push_back(adj[v][i]);
      w = dfs(adj_temp[0]);
      z = dfs(adj_temp[1]);
      u++, w++, z++;
      ans.push_back({u, {w, val / 2}});
      ans.push_back({w, {z, -val / 2}});
      ans.push_back({u, {z, val / 2}});
    } else {
      int x, y, w, z;
      vector<int> u_adj, v_adj;
      for (int i = 0; u_adj.size() < 2; i++)
        if (adj[u][i] != v) u_adj.push_back(adj[u][i]);
      for (int i = 0; v_adj.size() < 2; i++)
        if (adj[v][i] != u) v_adj.push_back(adj[v][i]);
      memset(seen, 0, sizeof seen);
      seen[v] = seen[u] = true;
      x = dfs(u_adj[0]);
      y = dfs(u_adj[1]);
      w = dfs(v_adj[0]);
      z = dfs(v_adj[1]);
      x++, y++, w++, z++;
      ans.push_back({x, {w, val / 2}});
      ans.push_back({x, {y, -val / 2}});
      ans.push_back({w, {z, -val / 2}});
      ans.push_back({y, {z, val / 2}});
    }
  }
  cout << "YES\n";
  cout << ans.size() << "\n";
  for (int i = 0; i < ans.size(); i++)
    cout << ans[i].first << ' ' << ans[i].second.first << ' '
         << ans[i].second.second << "\n";
}
