#include <bits/stdc++.h>
using namespace std;
int n, X, Y, W, P, root;
int Cnt, Head[200010], From[200010], To[200010], Next[200010];
long long Max_flow, Strength[200010], Weight[200010], Change[200010],
    Sig_weight[200010];
inline int gcd(int x, int y) {
  if (!y) return x;
  return gcd(y, x % y);
}
inline void read(int &x) {
  char ch;
  int N = 1;
  while ((ch = getchar()) && (!((ch >= '0') && (ch <= '9'))) && (!(ch == '-')))
    ;
  if ((ch == '-')) {
    N = -1;
    while ((ch = getchar()) && (!((ch >= '0') && (ch <= '9'))))
      ;
  }
  x = ch - 48;
  while ((ch = getchar()) && (((ch >= '0') && (ch <= '9'))))
    x = x * 10 + ch - 48;
  x *= N;
}
inline void Insert(int u, int v, int w, int p) {
  From[Cnt] = u;
  To[Cnt] = v;
  Weight[Cnt] = (long long)w;
  Strength[Cnt] = (long long)p;
  Next[Cnt] = Head[u];
  Head[u] = Cnt++;
}
inline void Init() {
  root = 1;
  memset(Head, -1, sizeof(Head));
  Cnt = 0;
  Max_flow = (long long)1 << 60;
}
inline void Minimize(int u) {
  for (int p = Head[u]; p != -1; p = Next[p]) {
    int v = To[p];
    Minimize(v);
    if (Strength[p] < Sig_weight[v]) {
      puts("-1");
      exit(0);
    }
    long long Delta = min(Weight[p] - 1, Strength[p] - Sig_weight[v]);
    Strength[p] -= Delta, Weight[p] -= Delta;
    Change[p] += Delta;
    Sig_weight[u] += Sig_weight[v] + Weight[p];
  }
}
inline long long Maximize(int u, long long Cur_limit) {
  long long Addline = 0;
  for (int p = Head[u]; p != -1; p = Next[p]) {
    int v = To[p];
    long long Delta = min(Change[p], Cur_limit);
    Strength[p] += Delta;
    Weight[p] += Delta;
    Cur_limit -= Delta;
    Addline += Delta;
    Delta = Maximize(v, min(Cur_limit, Strength[p] - Sig_weight[v]));
    Cur_limit -= Delta;
    Addline += Delta;
  }
  return Addline;
}
int main() {
  Init();
  read(n);
  for (int i = 1; i < n; i++)
    read(X), read(Y), read(W), read(P), Insert(X, Y, W, P);
  Minimize(root);
  Maximize(root, Max_flow);
  printf("%d\n", n);
  for (int i = 0; i < n - 1; i++)
    printf("%d %d %lld %lld\n", From[i], To[i], Weight[i], Strength[i]);
}
