#include <bits/stdc++.h>
using namespace std;
vector<pair<pair<int, int>, int> > ans;
void tree_size(const vector<vector<int> > &g, vector<int> &sz, int u,
               int parent = -1) {
  sz[u] = 1;
  for (int i = 0; i < g[u].size(); i++)
    if (g[u][i] != parent) {
      tree_size(g, sz, g[u][i], u);
      sz[u] += sz[g[u][i]];
    }
}
int tree_centroid(const vector<vector<int> > &g, int u = 0) {
  vector<int> sz(g.size());
  tree_size(g, sz, u);
  for (int i = 0; i < g[u].size(); i++)
    if (sz[g[u][i]] > g.size() / 2) return tree_centroid(g, g[u][i]);
  return u;
}
void dfs(const vector<vector<int> > &g, const vector<int> &sz, int u,
         int parent, const vector<int> &a) {
  for (int i = 0, s = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v == parent) continue;
    ans.push_back(make_pair(make_pair(u, v), a[s]));
    vector<int> t;
    for (int j = 1; j < sz[v]; j++) t.push_back(a[s + j] - a[s]);
    dfs(g, sz, v, u, t);
    s += sz[v];
  }
}
int main(int argc, char *argv[]) {
  int n;
  cin >> n;
  vector<vector<int> > g(n);
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    u--;
    v--;
    if (u > v) swap(u, v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  int c = tree_centroid(g);
  vector<int> sz(n);
  tree_size(g, sz, c);
  vector<pair<int, int> > g1, g2;
  for (int i = 0; i < g[c].size(); i++)
    g2.push_back(make_pair(sz[g[c][i]], g[c][i]));
  sort(g2.begin(), g2.end());
  int sum = 0;
  while (sum * 3 < (n - 1)) {
    sum += g2.back().first;
    g1.push_back(g2.back());
    g2.pop_back();
  }
  vector<int> a(sum), b(n - sum - 1);
  for (int i = 0; i < a.size(); i++) a[i] = i + 1;
  for (int i = 0; i < b.size(); i++) b[i] = (i + 1) * (sum + 1);
  g[c].clear();
  for (int i = 0; i < g1.size(); i++) g[c].push_back(g1[i].second);
  dfs(g, sz, c, -1, a);
  g[c].clear();
  for (int i = 0; i < g2.size(); i++) g[c].push_back(g2[i].second);
  dfs(g, sz, c, -1, b);
  for (int i = 0; i < ans.size(); i++)
    cout << (ans[i].first.first + 1) << ' ' << (ans[i].first.second + 1) << ' '
         << ans[i].second << endl;
  return 0;
}
