func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long BINF = 9e18, LINF = 2e9, mod = 998244353, P = 179,                   Q = 1791791791;   const long long MAXN = 1e4 + 7;   long long a[MAXN], b[MAXN], c[MAXN];   vector<pair<long long, long long>> g[MAXN];   bool cmp(vector<pair<long long, long long>> &a,            vector<pair<long long, long long>> &b) {     return a.size() < b.size();   }   struct way {     long long a, b, c;   };   vector<way> ways;   long long h[MAXN];   long long c1[MAXN], c2[MAXN];   long long f[MAXN];   long long tin[MAXN], tout[MAXN];   long long par[MAXN];   long long timer = 0;   void dfs(long long v, long long p = -1, long long pc = -1) {     par[v] = p;     h[v] = (p == -1 ? 0 : h[p] + 1);     tin[v] = timer++;     if (g[v].size() == 1 && p != -1) {       long long u, c;       for (pair<long long, long long> e : g[v])         if (e.first != p) u = e.first, c = e.second;       if (pc != c) {         cout <<  NO ;         exit(0);       }       dfs(u, p, pc);       return;     }     for (pair<long long, long long> e : g[v]) {       if (e.first == p) continue;       dfs(e.first, v, e.second);       if (c1[v] == -1)         c1[v] = f[e.first];       else if (c2[v] == -1)         c2[v] = f[e.first];       f[v] = f[e.first];     }     tout[v] = timer++;     if (p != -1) ways.push_back(way{p, v, pc});     if (g[v].size() == 0) f[v] = c1[v] = c2[v] = v;   }   void dfsd(long long v, long long p = -1) {     long long ps = -1;     for (long long i = 0; i < g[v].size(); ++i) {       if (g[v][i].first == p)         ps = i;       else         dfsd(g[v][i].first, v);     }     if (ps != -1) g[v].erase(g[v].begin() + ps);   }   vector<way> answ;   void add(long long a, long long b, long long c) {     if (a == b) return;     answ.push_back({a, b, c});   }   long long lca(long long a, long long b) {     if (h[a] < h[b]) swap(a, b);     while (h[a] > h[b]) a = par[a];     while (a != b) a = par[a], b = par[b];     return a;   }   long long dist(long long a, long long b) {     return h[a] + h[b] - 2 * h[lca(a, b)];   }   void solve() {     long long n;     cin >> n;     fill(c1, c1 + n, -1);     fill(c2, c2 + n, -1);     for (long long i = 0; i < n - 1; ++i) {       cin >> a[i] >> b[i] >> c[i];       --a[i];       --b[i];       g[a[i]].push_back({b[i], c[i]});       g[b[i]].push_back({a[i], c[i]});     }     long long root = min_element(g, g + n, cmp) - g;     dfsd(root, -1);     dfs(root);     for (way w : ways) {       if (h[w.a] > h[w.b]) swap(w.a, w.b);       long long lul = c1[w.a];       if (dist(lul, w.b) != dist(lul, w.a) + dist(w.a, w.b)) lul = c2[w.a];       if (lul == -1) lul = root;       add(c1[w.b], c2[w.b], -(w.c / 2));       add(root, lul, -(w.c / 2));       add(root, c1[w.b], w.c / 2);       add(lul, c2[w.b], w.c / 2);     }     cout <<  YES n ;     cout << answ.size() <<   n ;     for (way w : answ) cout << w.a + 1 <<     << w.b + 1 <<     << w.c <<   n ;     return;   }   signed main() {     ios_base::sync_with_stdio(false);     cout.precision(40);     solve();     return 0;   }   