#include <bits/stdc++.h>
using namespace std;
template <class T>
bool ckmin(T& a, T b) {
  return a > b ? a = b, 1 : 0;
}
template <class T>
bool ckmax(T& a, T b) {
  return a < b ? a = b, 1 : 0;
}
const int N = 1005;
int n;
vector<vector<int>> g;
vector<array<int, 3>> ed;
vector<int> sz;
void dfs_size(int u, int p = -1) {
  sz[u] = 1;
  for (auto& v : g[u]) {
    if (v == p) continue;
    dfs_size(v, u);
    sz[u] += sz[v];
  }
}
int get_centroid(int u) {
  dfs_size(u);
  int num = sz[u];
  int p = -1;
  do {
    int go = -1;
    for (auto& v : g[u]) {
      if (v == p) continue;
      if (2 * sz[v] > num) {
        go = v;
      }
    }
    p = u;
    u = go;
  } while (u != -1);
  return p;
}
void solve(int u, int p, int L, int R, int B, int cur) {
  ed.push_back({u, p, L * B - cur});
  cur += L * B - cur;
  L++;
  for (auto& v : g[u]) {
    if (v == p) continue;
    solve(v, u, L, L + sz[v] - 1, B, cur);
    L += sz[v];
  }
}
int main() {
  cin.tie(0)->sync_with_stdio(0);
  int n;
  cin >> n;
  if (n == 1) {
    return 0;
  }
  g.resize(n);
  sz.resize(n);
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    u--, v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  int c = get_centroid(0);
  dfs_size(c);
  vector<int> children = g[c];
  sort((children).begin(), (children).end(),
       [&](int x, int y) { return sz[x] < sz[y]; });
  vector<int> b1, b2;
  int bsum = 0;
  bsum += sz[children.back()];
  b1.push_back(children.back());
  children.pop_back();
  reverse((children).begin(), (children).end());
  while ((int)(children).size() && sz[children.back()] + bsum <= n / 2) {
    bsum += sz[children.back()];
    b1.push_back(children.back());
    children.pop_back();
  }
  for (auto& t : children) b2.push_back(t);
  int cur = 1;
  for (auto& t : b1) {
    solve(t, c, cur, cur + sz[t] - 1, 1, 0);
    cur += sz[t];
  }
  cur = 1;
  for (auto& t : b2) {
    solve(t, c, cur, cur + sz[t] - 1, bsum + 1, 0);
    cur += sz[t];
  }
  for (auto& e : ed) {
    cout << e[0] + 1 << " " << e[1] + 1 << " " << e[2] << '\n';
  }
  return 0;
}
