#include <bits/stdc++.h>
int inp() {
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  int sum = 0;
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum;
}
int head[1010], nxt[2010], end[2010];
int size[1010];
bool flg[1010], f[1010];
int cou = 0;
int min = 2147483647, root = 1;
void link(int a, int b) {
  nxt[++cou] = head[a];
  head[a] = cou;
  end[cou] = b;
}
int n;
void dfs(int cur, int last) {
  size[cur] = 1;
  int max = 0;
  for (int x = head[cur]; x != -1; x = nxt[x]) {
    if (end[x] != last) {
      dfs(end[x], cur);
      size[cur] += size[end[x]];
    }
  }
}
void dfs2(int cur, int last, int w) {
  int ww = w;
  for (int x = head[cur]; x != -1; x = nxt[x]) {
    if (end[x] != last) {
      printf("%d %d %d\n", cur, end[x], ww);
      dfs2(end[x], cur, w);
      ww += w * size[end[x]];
    }
  }
}
bool cmp(int a, int b) { return size[a] < size[b]; }
int main() {
  memset(head, -1, sizeof(head));
  n = inp();
  for (int i = 1; i < n; i++) {
    int u = inp();
    int v = inp();
    link(u, v);
    link(v, u);
  }
  for (int root = 1; root <= n; root++) {
    dfs(root, 0);
    std::vector<int> vec;
    for (int x = head[root]; x != -1; x = nxt[x]) vec.push_back(end[x]);
    std::sort(vec.begin(), vec.end(), cmp);
    int sum = 0;
    for (int i = 0; i < vec.size(); i++) {
      sum += size[vec[i]];
      if ((sum + 1) * (n - sum - 1) >= (n * n << 1) / 9) {
        int cur = 1;
        for (int j = 0; j <= i; j++) {
          printf("%d %d %d\n", root, vec[j], cur);
          dfs2(vec[j], root, 1);
          cur += size[vec[j]];
        }
        cur = sum + 1;
        for (int j = i + 1; j < vec.size(); j++) {
          printf("%d %d %d\n", root, vec[j], cur);
          dfs2(vec[j], root, sum + 1);
          cur += size[vec[j]] * (sum + 1);
        }
        return 0;
      }
    }
  }
}
