#include <bits/stdc++.h>
using namespace std;
const int N = 1003;
int n;
vector<int> G[N];
int sz[N];
int get_sz(int p, int fa) {
  sz[p] = 1;
  for (auto e : G[p])
    if (e ^ fa) sz[p] += get_sz(e, p);
  return sz[p];
}
int get_G(int p, int fa, int half) {
  for (auto e : G[p])
    if ((e ^ fa) && sz[e] > half) return get_G(e, p, half);
  return p;
}
void label(int p, int fa, int rsum, int& sum, int dlt) {
  printf("%d %d %d\n", p, fa, (sum += dlt) - rsum);
  rsum = sum;
  for (auto e : G[p])
    if (e ^ fa) label(e, p, rsum, sum, dlt);
}
int main() {
  scanf("%d", &n);
  for (int i = 1, u, v; i < n; i++) {
    scanf("%d%d", &u, &v);
    G[u].push_back(v);
    G[v].push_back(u);
  }
  get_sz(1, 0);
  int g = get_G(1, 0, n >> 1);
  get_sz(g, 0);
  sort(G[g].begin(), G[g].end(), [&](int a, int b) { return sz[a] < sz[b]; });
  int lim = n / 3;
  int sum = 0, vsum = 0;
  bool first = true;
  for (auto e : G[g]) {
    if (sum < lim) {
      label(e, g, 0, vsum, 1);
      sum += sz[e];
    } else {
      if (first) {
        vsum = 1;
        first = false;
      } else {
        sum++;
      }
      label(e, g, 0, vsum, sum);
    }
  }
  return 0;
}
