#include <bits/stdc++.h>
using namespace std;
long long n;
vector<long long> G[500005];
long long t1, d1, t2, d2;
long long dis1[500005], dis2[500005];
long long inp[500005], in[500005];
stringstream ss;
void dfs1(long long u, long long fa, long long d) {
  if (d > d1) {
    d1 = d;
    t1 = u;
  }
  for (long long i = 0; i < G[u].size(); i++) {
    if (G[u][i] == fa) continue;
    dfs1(G[u][i], u, d + 1);
  }
}
void dfs2(long long u, long long fa, long long d) {
  if (d > d2) {
    d2 = d;
    t2 = u;
  }
  dis1[u] = d;
  for (long long i = 0; i < G[u].size(); i++) {
    if (G[u][i] == fa) continue;
    dfs2(G[u][i], u, d + 1);
  }
}
void dfs3(long long u, long long fa, long long d) {
  dis2[u] = d;
  for (long long i = 0; i < G[u].size(); i++) {
    if (G[u][i] == fa) continue;
    dfs3(G[u][i], u, d + 1);
  }
}
void findpath(long long u, long long fa, long long t) {
  inp[u] = true;
  if (u == t) {
    memcpy(in, inp, sizeof inp);
    return;
  }
  for (long long i = 0; i < G[u].size(); i++) {
    if (G[u][i] == fa) continue;
    findpath(G[u][i], u, t);
  }
  inp[u] = false;
}
long long ans;
bool del[500005];
long long deg[500005];
void dfs4(long long u, long long fa) {
  del[u] = true;
  if ((dis1[u] > dis2[u] || del[t2]) && !del[t1]) {
    ans += dis1[u];
    ss << t1 << " " << u << " " << u << endl;
  } else if (!del[t2]) {
    ans += dis2[u];
    ss << t2 << " " << u << " " << u << endl;
  }
  for (long long i = 0; i < G[u].size(); i++) {
    if (G[u][i] == fa) continue;
    if (in[G[u][i]]) dfs4(G[u][i], u);
  }
}
signed main() {
  cin >> n;
  for (long long i = 1; i <= n - 1; i++) {
    long long u, v;
    cin >> u >> v;
    G[u].push_back(v);
    G[v].push_back(u);
    deg[u]++;
    deg[v]++;
  }
  dfs1(1, 0, 0);
  dfs2(t1, 0, 0);
  dfs3(t2, 0, 0);
  findpath(t1, 0, t2);
  queue<long long> Q;
  for (long long i = 1; i <= n; i++) {
    if (deg[i] == 1) Q.push(i);
  }
  while (Q.size()) {
    long long i = Q.front();
    Q.pop();
    if (in[i]) continue;
    if (del[i]) continue;
    del[i] = true;
    if (dis1[i] > dis2[i]) {
      ans += dis1[i];
      ss << t1 << " " << i << " " << i << endl;
    } else {
      ans += dis2[i];
      ss << t2 << " " << i << " " << i << endl;
    }
    for (long long j = 0; j < G[i].size(); j++) {
      deg[G[i][j]]--;
      if (deg[G[i][j]] == 1) Q.push(G[i][j]);
    }
  }
  dfs4(t1, 0);
  cout << ans << endl;
  cout << ss.str() << endl;
  return 0;
}
