#include <bits/stdc++.h>
using namespace std;
const long long N = 1e3 + 7, mod = 1e9 + 7;
vector<int> G[N];
vector<int> set1, set2;
int n;
int rep[N];
int si[N];
int ans[N];
int re(int x) {
  if (rep[x] != x) rep[x] = re(rep[x]);
  return rep[x];
}
void uni(int a, int b) {
  a = re(a);
  b = re(b);
  if (a == b) return;
  rep[a] = b;
  si[b] += si[a];
}
void dfs1(int v, int oj) {
  for (auto x : G[v]) {
    if (x == oj) continue;
    dfs1(x, v);
    si[v] += si[x];
  }
  si[v]++;
}
int dfs2(int v, int oj) {
  for (auto x : G[v]) {
    if (x == oj) continue;
    if (si[x] > (n) / 2) return dfs2(x, v);
  }
  return v;
}
int dfs3(int v, int oj, int war, int dod) {
  cout << v << " " << oj << " " << war - ans[oj] << endl;
  ans[v] = war;
  war += dod;
  for (auto x : G[v]) {
    if (x == oj) continue;
    war = dfs3(x, v, war, dod);
  }
  return war;
}
int32_t main() {
  cin >> n;
  for (int i = 1; i <= n; i++) rep[i] = i;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    G[a].push_back(b);
    G[b].push_back(a);
  }
  dfs1(1, 0);
  int v = dfs2(1, 0);
  for (int i = 0; i <= n; i++) si[i] = 0;
  dfs1(v, 0);
  set<pair<int, int> > S;
  for (auto x : G[v]) S.insert({si[x], x});
  while (S.size() > 2) {
    int a = (*S.begin()).second;
    S.erase(S.begin());
    int b = (*S.begin()).second;
    S.erase(S.begin());
    uni(a, b);
    S.insert({si[re(a)], re(a)});
  }
  int a = (*S.begin()).second;
  int b = (*next(S.begin())).second;
  int ita = 1;
  int itb = si[a] + 1;
  ans[v] = 0;
  for (auto x : G[v]) {
    if (re(x) == a)
      ita = dfs3(x, v, ita, 1);
    else
      itb = dfs3(x, v, itb, si[a] + 1);
  }
}
