#include <bits/stdc++.h>
using namespace std;
using LL = long long;
namespace _buff {
const size_t BUFF = 1 << 19;
char ibuf[BUFF], *ib = ibuf, *ie = ibuf;
char getc() {
  if (ib == ie) {
    ib = ibuf;
    ie = ibuf + fread(ibuf, 1, BUFF, stdin);
  }
  return ib == ie ? -1 : *ib++;
}
}  // namespace _buff
LL read() {
  using namespace _buff;
  LL ret = 0;
  bool pos = true;
  char c = getc();
  for (; (c < '0' || c > '9') && c != '-'; c = getc()) {
    assert(~c);
  }
  if (c == '-') {
    pos = false;
    c = getc();
  }
  for (; c >= '0' && c <= '9'; c = getc()) {
    ret = (ret << 3) + (ret << 1) + (c ^ 48);
  }
  return pos ? ret : -ret;
}
const size_t N = 1e3 + 5;
using P = pair<int, int>;
int n, sz[N];
vector<int> g[N];
int dfs1(int u, int p = 0) {
  int &ret = sz[u] = 1;
  for (int v : g[u]) {
    if (v != p) {
      ret += dfs1(v, u);
    }
  }
  return ret;
}
P get_rt(int u, int p = 0) {
  P ret = {INT_MAX, 0};
  int mx = n - sz[u];
  for (int v : g[u]) {
    if (v != p) {
      mx = max(mx, sz[v]);
      ret = min(ret, get_rt(v, u));
    }
  }
  return min(ret, {mx, u});
}
int rt[N];
int find(int x) { return x == rt[x] ? x : (rt[x] = find(rt[x])); }
int dfs2(int u, int r, int mul = 1, int p = 0) {
  int ret = 1;
  for (int v : g[u]) {
    if (v != p && (!rt[v] || find(v) == r)) {
      printf("%d %d %d\n", u, v, mul * ret);
      ret += dfs2(v, r, mul, u);
    }
  }
  return ret;
}
int main() {
  n = read();
  for (int i = 1; i < n; ++i) {
    int u = read(), v = read();
    g[u].emplace_back(v);
    g[v].emplace_back(u);
    if (n < 3) {
      printf("%d %d 543210\n", u, v);
    }
  }
  if (n < 3) return 0;
  assert(dfs1(1) == n);
  int u = get_rt(1).second;
  struct Comp {
    Comp() {}
    bool operator()(int x, int y) const {
      if (sz[x] != sz[y]) {
        return sz[x] < sz[y];
      }
      return x < y;
    }
  };
  set<int, Comp> s;
  for (int v : g[u]) {
    if (sz[v] > sz[u]) {
      sz[v] = n - sz[u];
    }
    rt[v] = v;
    s.emplace(v);
  }
  while (s.size() > 2) {
    auto it = s.begin();
    int x = *it, y = *++it;
    s.erase(x);
    s.erase(y);
    rt[x] = y;
    sz[y] += sz[x];
    s.emplace(y);
  }
  dfs2(u, *s.begin(), dfs2(u, *s.rbegin()));
  return 0;
}
