#include <bits/stdc++.h>
using namespace std;
const int mx = 1e6 + 10;
int n;
vector<int> adj[1111];
int sz[1111], vals[1111];
void dfs_sz(int cur, int prv) {
  sz[cur] = 1;
  for (int nxt : adj[cur]) {
    if (nxt == prv) continue;
    dfs_sz(nxt, cur);
    sz[cur] += sz[nxt];
  }
}
int find_centroid(int cur, int prv) {
  for (int nxt : adj[cur]) {
    if (nxt == prv) continue;
    int v = find_centroid(nxt, cur);
    if (v != -1) return v;
  }
  if (sz[cur] * 2 >= n) return cur;
  return -1;
}
void set_value(int cur, int prv, int incr, int &val) {
  vals[cur] = min(val, mx);
  val += incr;
  val = min(val, mx);
  cout << cur + 1 << ' ' << prv + 1 << ' ' << max(vals[cur] - vals[prv], 1)
       << endl;
  for (int nxt : adj[cur]) {
    if (nxt == prv) continue;
    set_value(nxt, cur, incr, val);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    u--, v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  dfs_sz(0, -1);
  int C = find_centroid(0, -1);
  dfs_sz(C, -1);
  sort(adj[C].begin(), adj[C].end(),
       [&](int a, int b) { return sz[a] > sz[b]; });
  vals[C] = 0;
  int val = 1, incr = 1;
  for (int nxt : adj[C]) {
    set_value(nxt, C, incr, val);
    if (incr == 1 && val * 3 >= n) incr = val;
  }
  return 0;
}
