#include <bits/stdc++.h>
const int N = 1000005;
int n, u, v, t, h[N], nxt[N], adj[N], fa[N], o[N], tot, rt, sz[N], mx[N], d,
    w[N];
void add() {
  nxt[++t] = h[u], h[u] = t, adj[t] = v, nxt[++t] = h[v], h[v] = t, adj[t] = u;
}
void ckMax(int &p, int q) { p = (p > q ? p : q); }
void DFS(int x) {
  sz[x] = 1, mx[x] = 0;
  for (int i = h[x], j; i; i = nxt[i])
    if ((j = adj[i]) ^ fa[x])
      fa[j] = x, DFS(j), sz[x] += sz[j], ckMax(mx[x], sz[j]);
  ckMax(mx[x], n - sz[x]);
  if (mx[x] <= n / 2) rt = x;
}
void dfs(int x) {
  sz[x] = 1;
  for (int i = h[x], j; i; i = nxt[i])
    if ((j = adj[i]) ^ fa[x]) fa[j] = x, dfs(j), sz[x] += sz[j];
}
void dfs(int x, int p) {
  tot += d, w[x] = tot, printf("%d %d %d\n", x, p, w[x] - w[p]);
  for (int i = h[x], j; i; i = nxt[i])
    if ((j = adj[i]) ^ fa[x]) fa[j] = x, dfs(j, x);
}
int main() {
  scanf("%d", &n);
  int i;
  for (i = 1; i < n; ++i) scanf("%d%d", &u, &v), add();
  DFS(1), fa[rt] = 0, dfs(rt);
  for (i = h[rt]; i; i = nxt[i]) o[++*o] = adj[i];
  std::sort(o + 1, o + 1 + *o,
            [&](const int &p, const int &q) { return sz[p] < sz[q]; });
  for (i = 1, u = 0; i <= o[0]; ++i) {
    u += sz[o[i]];
    if (u >= (n - 1) / 3) {
      v = i;
      break;
    }
  }
  for (i = d = 1; i <= v; ++i) fa[o[i]] = rt, dfs(o[i], rt);
  for (i = v + 1, d = tot + 1, tot = 0; i <= o[0]; ++i)
    fa[o[i]] = rt, dfs(o[i], rt);
  return 0;
}
