#include<iostream>
#include<vector>
#include<queue>
#include<functional>
#include<set>
using namespace std;
vector<vector<int>> adj;
vector<int> par;
vector<bool> deleted;
vector<int> depth;
priority_queue<pair<int, int>> leaves;
void dfs(int u, int p=-1, int d=0){
if(par[u] != -1) return;
par[u] = p;
depth[u] = d;
if(adj[u].size() == 1) leaves.push(make_pair(depth[u], u));
for(auto v: adj[u]) dfs(v, u, d+1);
}
bool delete_dfs(int u){
if(deleted[u]) return 0;
deleted[u] = true;
for(auto v: adj[u]){
if(par[u] != v) delete_dfs(v);
}
return par[u]!=0;
}
int main()
{
int n; cin >> n;
adj.assign(n, vector<int>());
par.assign(n, -1);
deleted.assign(n, 0);
depth.assign(n, 0);
for(int i=0; i<n-1 ;i ++){
int u, v; cin >> u >> v;
u--; v--;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(0, 0);
long long res = 0;
while(!leaves.empty()){
auto leave_p = leaves.top(); leaves.pop();
int leave = leave_p.second;
if(leave_p.first != depth[leave] || deleted[leave]) continue;
bool aux = delete_dfs(par[leave]); res+=aux;
cout << leave+1 << " " << leave_p.first << " " <<depth[leave] << endl;
for(int i=0; i<n; i++){
if(!deleted[i]) cout << i+1 << endl;
}
cout <<endl;
if(!aux) continue;
deleted[par[par[leave]]] = true;
}
cout << res << endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPGZ1bmN0aW9uYWw+CiNpbmNsdWRlPHNldD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgp2ZWN0b3I8dmVjdG9yPGludD4+IGFkajsKdmVjdG9yPGludD4gcGFyOwp2ZWN0b3I8Ym9vbD4gZGVsZXRlZDsKdmVjdG9yPGludD4gZGVwdGg7CnByaW9yaXR5X3F1ZXVlPHBhaXI8aW50LCBpbnQ+PiBsZWF2ZXM7Cgp2b2lkIGRmcyhpbnQgdSwgaW50IHA9LTEsIGludCBkPTApewogICAgaWYocGFyW3VdICE9IC0xKSByZXR1cm47CiAgICBwYXJbdV0gPSBwOwogICAgZGVwdGhbdV0gPSBkOwogICAgaWYoYWRqW3VdLnNpemUoKSA9PSAxKSBsZWF2ZXMucHVzaChtYWtlX3BhaXIoZGVwdGhbdV0sIHUpKTsKICAgIGZvcihhdXRvIHY6IGFkalt1XSkgZGZzKHYsIHUsIGQrMSk7Cn0KCmJvb2wgZGVsZXRlX2RmcyhpbnQgdSl7CiAgICBpZihkZWxldGVkW3VdKSByZXR1cm4gMDsKICAgIGRlbGV0ZWRbdV0gPSB0cnVlOwogICAgZm9yKGF1dG8gdjogYWRqW3VdKXsKICAgICAgICBpZihwYXJbdV0gIT0gdikgZGVsZXRlX2Rmcyh2KTsKICAgIH0gCiAgICByZXR1cm4gcGFyW3VdIT0wOwp9CgppbnQgbWFpbigpCnsKICAgIGludCBuOyBjaW4gPj4gbjsKICAgIGFkai5hc3NpZ24obiwgdmVjdG9yPGludD4oKSk7CiAgICBwYXIuYXNzaWduKG4sIC0xKTsKICAgIGRlbGV0ZWQuYXNzaWduKG4sIDApOwogICAgZGVwdGguYXNzaWduKG4sIDApOwogICAgCiAgICBmb3IoaW50IGk9MDsgaTxuLTEgO2kgKyspewogICAgICAgIGludCB1LCB2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIHUtLTsgdi0tOwogICAgICAgIGFkalt1XS5wdXNoX2JhY2sodik7CiAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIAogICAgZGZzKDAsIDApOwogICAgbG9uZyBsb25nIHJlcyA9IDA7CiAgICB3aGlsZSghbGVhdmVzLmVtcHR5KCkpewogICAgICAgIGF1dG8gbGVhdmVfcCA9IGxlYXZlcy50b3AoKTsgbGVhdmVzLnBvcCgpOwogICAgICAgIGludCBsZWF2ZSA9IGxlYXZlX3Auc2Vjb25kOwogICAgICAgIGlmKGxlYXZlX3AuZmlyc3QgIT0gZGVwdGhbbGVhdmVdIHx8IGRlbGV0ZWRbbGVhdmVdKSBjb250aW51ZTsKICAgICAgICBib29sIGF1eCA9IGRlbGV0ZV9kZnMocGFyW2xlYXZlXSk7IHJlcys9YXV4OwogICAgICAgIGNvdXQgPDwgbGVhdmUrMSA8PCAiICIgPDwgbGVhdmVfcC5maXJzdCA8PCAiICIgPDxkZXB0aFtsZWF2ZV0gPDwgIGVuZGw7CiAgICAgICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgICAgICAgaWYoIWRlbGV0ZWRbaV0pIGNvdXQgPDwgaSsxIDw8IGVuZGw7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDxlbmRsOwogICAgICAgIGlmKCFhdXgpIGNvbnRpbnVlOwogICAgICAgIGRlbGV0ZWRbcGFyW3BhcltsZWF2ZV1dXSA9IHRydWU7CiAgICB9CiAgICAKICAgIGNvdXQgPDwgcmVzIDw8ICBlbmRsOwogICAgcmV0dXJuIDA7Cn0=