#include <bits/stdc++.h>
using namespace std;
const int MN = 1005, inf = 1000000005, mod = 1000000007;
const long long INF = 1000000000000000005LL;
vector<int> G[MN];
vector<int> raki[MN];
priority_queue<pair<int, int> > Q;
int rep[MN];
void Union(int a, int b) {
  rep[b] = a;
  for (auto r : raki[b]) raki[a].push_back(r);
}
int Find(int x) {
  if (x == rep[x]) return x;
  return (rep[x] = Find(rep[x]));
}
int pod[MN], used[MN], suma[MN];
int n, hf, centro;
void cen(int x) {
  used[x] = 1;
  pod[x] = 1;
  int mx = -1;
  for (auto v : G[x])
    if (!used[v]) {
      cen(v);
      pod[x] += pod[v];
      mx = max(mx, pod[v]);
    }
  mx = max(mx, n - pod[x]);
  if (mx <= hf) centro = x;
}
void dajPc(int x) {
  used[x] = 2;
  pod[x] = 1;
  for (auto v : G[x])
    if (used[v] != 2) {
      dajPc(v);
      pod[x] += pod[v];
      if (x == centro) {
        raki[v].push_back(v);
        rep[v] = v;
        Q.push({-pod[v], v});
      }
    }
}
vector<int> gen(int v, int ile, int hop) {
  vector<int> ret;
  while (ile--) {
    ret.push_back(v);
    v += hop;
  }
  return ret;
}
void print(int u, int v, int w) {
  if (u > n) u = centro;
  if (v > n) v = centro;
  printf("%d %d %d\n", u, v, w);
}
void pisz(int x, vector<int> chce) {
  int pos = 0;
  used[x] = 3;
  for (auto v : G[x])
    if (used[v] != 3) {
      vector<int> cur;
      int cs = pod[v];
      print(x, v, chce[pos]);
      for (int i = 1; i < cs; ++i) cur.push_back(chce[pos + i] - chce[pos]);
      pisz(v, cur);
      pos += cs;
    }
}
int main() {
  scanf("%d", &n);
  hf = n >> 1;
  if (n == 1) return 0;
  if (n == 2) {
    printf("1 2 1");
    return 0;
  }
  for (int i = 1; i < n; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    G[a].push_back(b);
    G[b].push_back(a);
  }
  cen(1);
  dajPc(centro);
  while (Q.size() > 2) {
    pair<int, int> a = Q.top();
    Q.pop();
    pair<int, int> b = Q.top();
    Q.pop();
    Union(a.second, b.second);
    pair<int, int> c = {a.first + b.first, Find(a.second)};
    Q.push(c);
  }
  assert(Q.size() == 2);
  pair<int, int> x = Q.top();
  Q.pop();
  pair<int, int> y = Q.top();
  vector<int> male = gen(1, -x.first, 1);
  vector<int> duze = gen(-x.first + 1, -y.first, -x.first + 1);
  for (auto v : raki[x.second]) G[n + 1].push_back(v);
  for (auto v : raki[y.second]) G[n + 2].push_back(v);
  used[centro] = 3;
  pisz(n + 1, male);
  pisz(n + 2, duze);
}
