func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e6 + 5;   struct edge {     int x, y, w, p;     edge() {}     void input() { scanf( %d%d%d%d , &x, &y, &w, &p); }   } E[N], EE[N];   int n;   vector<int> G[N];   long long W[N], WW[N];   void dfs(int x, int y, int id, int mi) {     if (id) {       int tmp = EE[id].p - E[id].p;       tmp = min(mi, tmp);       E[id].p += tmp;       E[id].w += tmp;       mi = min(mi - tmp, E[id].p - (int)W[y]);       WW[id] = tmp;     }     for (int i = 0; i < G[y].size(); i++) {       int ID = G[y][i];       if (id == 0) mi = 2e9;       dfs(E[ID].x, E[ID].y, ID, mi);       mi -= WW[ID];       WW[id] += WW[ID];     }   }   void dfs(int x, int y, int id) {     for (int i = 0; i < G[y].size(); i++) {       int ID = G[y][i];       dfs(E[ID].x, E[ID].y, ID);     }     if (id == 0) return;     if (E[id].p < W[y]) {       puts( -1 );       exit(0);     }     long long tmp = min(E[id].p - W[y], (long long)E[id].w - 1);     E[id].p -= tmp;     E[id].w -= tmp;     W[x] += W[y];     W[x] += E[id].w;   }   int main() {     scanf( %d , &n);     for (int i = 1; i < n; i++) {       E[i].input();       EE[i] = E[i];       G[E[i].x].push_back(i);     }     dfs(0, 1, 0);     dfs(0, 1, 0, 2e9);     cout << n << endl;     for (int i = 1; i < n; i++) {       printf( %d %d %d %d n , E[i].x, E[i].y, E[i].w, E[i].p);     }   }   