#include <bits/stdc++.h>
using namespace std;
int n, cnt = -1;
int fir[1000], to[2000];
int val[2000], nxt[2000];
int sz[1000], f[1000], rt = 0;
bool bel[1000];
inline void add(int a, int b) {
  to[++cnt] = b;
  nxt[cnt] = fir[a];
  fir[a] = cnt;
  return;
}
void print(void) {
  for (int i = 0; i < n; i++)
    for (int j = fir[i]; j != -1; j = nxt[j])
      if (to[j] > i) printf("%d %d %d\n", i + 1, to[j] + 1, val[j]);
  return;
}
void dfs1(int i, int fa) {
  sz[i] = 1;
  int x = 0;
  for (int j = fir[i]; j != -1; j = nxt[j])
    if (to[j] != fa) {
      dfs1(to[j], i);
      sz[i] += sz[to[j]];
      x = max(x, sz[to[j]]);
    }
  f[i] = max(x, n - sz[i]);
  return;
}
void dfs2(int i, int fa) {
  sz[i] = 1;
  for (int j = fir[i]; j != -1; j = nxt[j])
    if (to[j] != fa) {
      dfs2(to[j], i);
      sz[i] += sz[to[j]];
    }
  return;
}
void dfs3(int i, int fa, int base) {
  int t = sz[i];
  for (int j = fir[i]; j != -1; j = nxt[j])
    if (to[j] != fa) {
      t -= sz[to[j]];
      dfs3(to[j], i, base);
      val[j] = val[j ^ 1] = t * base;
    }
  return;
}
int main(void) {
  memset(fir, -1, sizeof(fir));
  int a, b;
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &a, &b);
    add(a - 1, b - 1);
    add(b - 1, a - 1);
  }
  dfs1(0, -1);
  for (int i = 1; i < n; i++)
    if (f[rt] > f[i]) rt = i;
  dfs2(rt, -1);
  int s1 = 0, s2 = 0;
  for (int i = fir[rt]; i != -1; i = nxt[i]) {
    if (s1 < s2) {
      s1 += sz[to[i]];
      bel[to[i]] = 0;
    } else {
      s2 += sz[to[i]];
      bel[to[i]] = 1;
    }
  }
  int t1 = s1 + 1, t2 = s2 + 1, t;
  for (int i = fir[rt]; i != -1; i = nxt[i]) {
    t = to[i];
    if (bel[t] == 0)
      t1 -= sz[t];
    else
      t2 -= sz[t];
    dfs3(t, rt, bel[t] == 0 ? 1 : s1 + 1);
    val[i] = val[i ^ 1] = (bel[t] == 0 ? t1 : t2 * (s1 + 1));
  }
  print();
  return 0;
}
