#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int to[2 * N], nxt[2 * N], head[N], size[N], ans[N][5], n, u, v, rt, cnt, flag,
    tot, id, ii, a, b, c, m, d;
inline void add(int u, int v) {
  to[++cnt] = v;
  nxt[cnt] = head[u];
  head[u] = cnt;
}
inline void dfs1(int u, int fa) {
  size[u] = 1;
  int flag = 1;
  for (int i = head[u]; i; i = nxt[i]) {
    int v = to[i];
    if (v == fa) continue;
    dfs1(v, u);
    size[u] += size[v];
    if (size[v] > n / 2) flag = 0;
  }
  if (n - size[u] > n / 2) flag = 0;
  if (flag) rt = u;
}
inline void dfs2(int u, int fa) {
  size[u] = 1;
  for (int i = head[u]; i; i = nxt[i]) {
    int v = to[i];
    if (v == fa) continue;
    dfs2(v, u);
    size[u] += size[v];
  }
}
inline void print1(int u, int fa) {
  for (int i = head[u]; i; i = nxt[i]) {
    int v = to[i];
    if (v == fa) continue;
    ans[++m][1] = u, ans[m][2] = v, ans[m][3] = c * (a + 1) - d, d += ans[m][3],
    c++;
    int t = ans[m][3];
    print1(v, u);
    d -= t;
  }
}
inline void print2(int u, int fa) {
  for (int i = head[u]; i; i = nxt[i]) {
    int v = to[i];
    if (v == fa) continue;
    ans[++m][1] = u, ans[m][2] = v, ans[m][3] = c - d, d += ans[m][3], c++;
    int t = ans[m][3];
    print2(v, u);
    d -= t;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &u, &v);
    add(u, v);
    add(v, u);
  }
  dfs1(1, 0);
  dfs2(rt, 0);
  for (int i = head[rt]; i; i = nxt[i]) {
    if (size[to[i]] >= (n + 1) / 3) {
      flag = 1;
      id = to[i];
      break;
    }
    tot += size[to[i]];
    if (tot >= (n + 1) / 3) {
      flag = 2;
      id = to[i];
      break;
    }
  }
  if (flag == 1) {
    b = size[id];
    a = n - b - 1;
    ans[++m][1] = rt, ans[m][2] = id, ans[m][3] = a + 1;
    c = 2;
    d = a + 1;
    print1(id, rt);
    c = 1;
    d = 0;
    for (int i = head[rt]; i; i = nxt[i]) {
      int v = to[i];
      if (v == id) continue;
      ans[++m][1] = rt, ans[m][2] = v, ans[m][3] = c - d, d += ans[m][3], c++;
      int t = ans[m][3];
      print2(v, rt);
      d -= t;
    }
  } else {
    a = tot;
    b = n - tot - 1;
    c = 1;
    d = 0;
    for (int i = head[rt]; i; i = nxt[i]) {
      int v = to[i];
      ans[++m][1] = rt, ans[m][2] = v, ans[m][3] = c - d, d += ans[m][3], c++;
      int t = ans[m][3];
      print2(v, rt);
      d -= t;
      if (v == id) {
        ii = nxt[i];
        break;
      }
    }
    c = 1;
    d = 0;
    for (int i = ii; i; i = nxt[i]) {
      int v = to[i];
      ans[++m][1] = rt, ans[m][2] = v, ans[m][3] = c * (a + 1) - d,
      d += ans[m][3], c++;
      int t = ans[m][3];
      print1(v, rt);
      d -= t;
    }
  }
  for (int i = 1; i <= m; i++)
    printf("%d %d %d\n", ans[i][1], ans[i][2], ans[i][3]);
  return 0;
}
