#include <bits/stdc++.h>
using namespace std;
int n, centroid;
int sz[400400], a[400400];
set<pair<int, vector<int> > > st;
map<pair<int, int>, int> ans;
vector<int> g[400400];
void calc(int v, int p) {
  sz[v] = 1;
  for (int to : g[v]) {
    if (to == p) continue;
    calc(to, v);
    sz[v] += sz[to];
  }
}
int get_centroid(int v, int p) {
  for (int to : g[v]) {
    if (to == p) continue;
    if (sz[to] > n / 2) return get_centroid(to, v);
  }
  return v;
}
void solve(int v, int p, int z, vector<int> vals) {
  for (int to : g[v]) {
    if (to == p || (z != a[to] && v == centroid)) continue;
    ans[make_pair(v, to)] = vals[0];
    vector<int> new_vals;
    for (int i = 1; i < sz[to]; ++i) new_vals.push_back(vals[i] - vals[0]);
    solve(to, v, z, new_vals);
    vector<int> updated_vals;
    for (int i = sz[to]; i < vals.size(); ++i) updated_vals.push_back(vals[i]);
    vals = updated_vals;
  }
}
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  if (n == 1) return 0;
  for (int i = 1; i <= n - 1; ++i) {
    int a, b;
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  calc(1, 0);
  centroid = get_centroid(1, 0);
  calc(centroid, 0);
  for (int to : g[centroid]) {
    vector<int> vec;
    vec.push_back(to);
    st.insert(make_pair(sz[to], vec));
  }
  while (st.size() >= 3) {
    vector<int> v1 = st.begin()->second;
    int sz1 = st.begin()->first;
    st.erase(st.begin());
    vector<int> v2 = st.begin()->second;
    int sz2 = st.begin()->first;
    st.erase(st.begin());
    vector<int> u = v1;
    for (int id : v2) u.push_back(id);
    st.insert(make_pair(sz1 + sz2, u));
  }
  int sz1 = 0, sz2 = 0;
  vector<int> v1 = st.begin()->second;
  for (int id : v1) a[id] = 1;
  sz1 = st.begin()->first;
  sz2 = n - 1 - sz1;
  vector<int> vals1, vals2;
  for (int i = 1; i <= sz1; ++i) vals1.push_back(i);
  for (int i = 1; i <= sz2; ++i) vals2.push_back((sz1 + 1) * i);
  solve(centroid, 0, 1, vals1);
  solve(centroid, 0, 0, vals2);
  for (auto it : ans)
    cout << (it).first.first << " " << (it).first.second << " " << it.second
         << "\n";
  return 0;
}
