#include <bits/stdc++.h>
using namespace std;
int siz[1005], fa[1005];
bool life[1005];
int root, minn, n, now;
int dp[1005];
int dis[1005];
bool maps[1005][1005];
void dfs1(int x) {
  siz[x] = 1;
  int maxx = 0;
  for (int i = 1; i <= n; i++) {
    if (i != fa[x] && maps[x][i]) {
      fa[i] = x;
      dfs1(i);
      siz[x] += siz[i];
      maxx = max(maxx, siz[i]);
    }
  }
  maxx = max(maxx, n - siz[x]);
  if (maxx < minn) {
    minn = maxx;
    root = x;
  }
}
void dfs2(int x) {
  dis[x] = minn;
  minn += now;
  for (int i = 1; i <= n; i++) {
    if (i != fa[x] && maps[x][i]) {
      dfs2(i);
    }
  }
}
int main() {
  int u, v, g, tp;
  scanf("%d", &n);
  minn = n;
  g = (n - 1) / 2;
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &u, &v);
    maps[u][v] = maps[v][u] = 1;
  }
  if (n == 1) return 0;
  if (n == 2) {
    printf("1 2 1\n");
    return 0;
  }
  fa[1] = 0;
  dfs1(1);
  if (fa[root]) {
    fa[fa[root]] = root;
    dfs1(fa[root]);
    fa[root] = 0;
  }
  dp[0] = -1;
  for (int i = 1; i <= n; i++) {
    if (maps[root][i]) {
      for (int j = g; j >= siz[i]; j--) {
        if ((dp[j - siz[i]]) && !dp[j]) dp[j] = i;
      }
    }
  }
  while (dp[g] == 0) g--;
  tp = g;
  for (int i = 1; i <= n; i++) {
    if (maps[root][i]) life[i] = 1;
  }
  while (tp) {
    maps[root][dp[tp]] = 0;
    tp -= siz[dp[tp]];
  }
  minn = 0;
  now = g + 1;
  dfs2(root);
  for (int i = 1; i <= n; i++) {
    if (life[i]) maps[root][i] = !maps[root][i];
  }
  minn = 0;
  now = 1;
  dfs2(root);
  for (int i = 1; i <= n; i++) {
    if (life[i]) maps[root][i] = 1;
  }
  for (int i = 1; i < n; i++)
    for (int j = i + 1; j <= n; j++) {
      if (maps[i][j]) printf("%d %d %d\n", i, j, abs(dis[i] - dis[j]));
    }
  return 0;
}
