#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  int f = 1;
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = x * 10 + c - '0';
    c = getchar();
  }
  x *= f;
}
template <class T>
inline void umin(T &x, T y) {
  x = x < y ? x : y;
}
template <class T>
inline void umax(T &x, T y) {
  x = x > y ? x : y;
}
inline unsigned int R() {
  static unsigned int seed = 416;
  return seed ^= seed >> 5, seed ^= seed << 17, seed ^= seed >> 13;
}
const int N = 6666;
struct node {
  int x, y, z;
};
vector<node> ans;
int n, len, sz[N], s[N];
vector<int> e[N];
int bel[N];
int val[N], tota, totb, A;
bool cmp(int x, int y) { return sz[x] > sz[y]; }
void dfsa(int u, int fa) {
  tota++;
  val[u] = tota;
  ans.push_back((node){u, fa, val[u] - val[fa]});
  for (register int i = (0); i <= (((int)e[u].size()) - 1); i++)
    if (e[u][i] != fa) dfsa(e[u][i], u);
}
void dfsb(int u, int fa) {
  totb += A;
  val[u] = totb;
  ans.push_back((node){u, fa, val[u] - val[fa]});
  for (register int i = (0); i <= (((int)e[u].size()) - 1); i++)
    if (e[u][i] != fa) dfsb(e[u][i], u);
}
void dfs(int u, int fa) {
  sz[u] = 1;
  for (register int i = (0); i <= (((int)e[u].size()) - 1); i++)
    if (e[u][i] != fa) dfs(e[u][i], u), sz[u] += sz[e[u][i]];
}
int main() {
  read(n);
  for (register int i = (1); i <= (n - 1); i++) {
    int u, v;
    read(u);
    read(v);
    e[u].push_back(v);
    e[v].push_back(u);
  }
  if (n == 2) {
    printf("1 2 1\n");
    return 0;
  }
  for (register int rt = (1); rt <= (n); rt++) {
    dfs(rt, 0);
    len = 0;
    for (register int i = (0); i <= (((int)e[rt].size()) - 1); i++)
      s[++len] = e[rt][i];
    sort(s + 1, s + len + 1, cmp);
    if ((sz[s[1]]) * 3 > 2 * n) continue;
    int cur = sz[s[1]];
    bel[rt] = 1;
    for (register int i = (2); i <= (len); i++)
      if (cur * 3 < n && (cur + sz[s[i]]) * 3 <= 2 * n)
        cur += sz[s[i]], bel[s[i]] = 0;
      else
        bel[s[i]] = 1;
    cerr << "rt= " << rt << ' ' << cur << endl;
    A = cur;
    for (register int i = (1); i <= (len); i++)
      if (bel[s[i]])
        dfsb(s[i], rt);
      else
        dfsa(s[i], rt);
    assert(((int)ans.size()) == n - 1);
    for (register int i = (0); i <= (((int)ans.size()) - 1); i++)
      printf("%d %d %d\n", ans[i].x, ans[i].y, ans[i].z);
    return 0;
  }
  return 0;
}
