#include <bits/stdc++.h>
using namespace std;
const int inf = 1e6 + 5;
const int nmax = 1e5 + 5;
vector<int> l[nmax];
int d[nmax], v[nmax], n;
bool mycmp(int a, int b) { return d[a] > d[b]; }
int find_centroid(int nod, int tata) {
  for (int x : l[nod])
    if (x != tata) {
      int u = find_centroid(x, nod);
      if (u != -1) return u;
    }
  if (d[nod] * 2 >= n) return nod;
  return -1;
}
void build_subtree_sizes(int nod, int tata) {
  d[nod] = 1;
  for (int x : l[nod])
    if (x != tata) {
      build_subtree_sizes(x, nod);
      d[nod] += d[x];
    }
}
void build_subtree_values(int nod, int tata, int i, int &val) {
  v[nod] = min(val, inf);
  val = min(val + i, inf);
  cout << nod << " " << tata << " " << max(v[nod] - v[tata], 1) << "\n";
  for (int x : l[nod])
    if (x != tata) build_subtree_values(x, nod, i, val);
}
int main() {
  int x, y;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    cin >> x >> y;
    l[x].push_back(y);
    l[y].push_back(x);
  }
  build_subtree_sizes(1, -1);
  int c = find_centroid(1, -1);
  build_subtree_sizes(c, -1);
  sort(l[c].begin(), l[c].end(), mycmp);
  x = 1, y = 1;
  for (int u : l[c]) {
    build_subtree_values(u, c, y, x);
    if (x >= n / 3 and y == 1) y = x;
  }
  return 0;
}
