#include <bits/stdc++.h>
using namespace std;
const int N = 10000;
const long double pi = acos(-1.0);
int n, siz[1010], mx[1010], cnt1 = 1, cnt2 = 1, maxsiz, rt;
vector<int> sq[1010];
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while ((ch < '0') || (ch > '9')) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while ((ch >= '0') && (ch <= '9')) {
    x = x * 10 + (ch - '0');
    ch = getchar();
  }
  return x * f;
}
void getrt(int u, int fu) {
  siz[u] = 1;
  int len = sq[u].size();
  for (register int i = 0; i <= len - 1; i++) {
    int v = sq[u][i];
    if (v == fu) continue;
    getrt(v, u);
    siz[u] += siz[v];
    mx[u] = max(siz[v], mx[u]);
  }
  mx[u] = max(mx[u], n - siz[u]);
  if (mx[u] < maxsiz) {
    maxsiz = mx[u];
    rt = u;
  }
}
void dfs(int u, int fu) {
  siz[u] = 1;
  int len = sq[u].size();
  for (register int i = 0; i <= len - 1; i++) {
    int v = sq[u][i];
    if (v == fu) continue;
    dfs(v, u);
    siz[u] += siz[v];
  }
}
void dfs1(int u, int fu, int w) {
  printf("%d %d %d\n", fu, u, cnt1 - w);
  int len = sq[u].size();
  int tmp = cnt1;
  cnt1++;
  for (register int i = 0; i <= len - 1; i++) {
    int v = sq[u][i];
    if (v == fu) continue;
    dfs1(v, u, tmp);
  }
}
void dfs2(int u, int fu, int w) {
  printf("%d %d %d\n", fu, u, cnt2 * cnt1 - w);
  int len = sq[u].size();
  int tmp = cnt2 * cnt1;
  cnt2++;
  for (register int i = 0; i <= len - 1; i++) {
    int v = sq[u][i];
    if (v == fu) continue;
    dfs2(v, u, tmp);
  }
}
bool cmp(int x, int y) { return siz[x] < siz[y]; }
int main() {
  n = read();
  maxsiz = n;
  for (register int i = 1; i <= n - 1; i++) {
    int u = read(), v = read();
    sq[u].push_back(v);
    sq[v].push_back(u);
  }
  getrt(1, 0);
  dfs(rt, 0);
  sort(sq[rt].begin(), sq[rt].end(), cmp);
  int len = sq[rt].size();
  for (register int i = 0; i <= len - 1; i++) {
    int v = sq[rt][i];
    if (cnt1 * 3 < n)
      dfs1(v, rt, 0);
    else
      dfs2(v, rt, 0);
  }
  return 0;
}
