#include <iostream>
#include <vector>
using namespace std;
const int N = 500067;
vector<pair<int, int>> adj[N];
int color[N];
bool czy[N];
bool czy_krawedz[N];
vector<int> na;
vector<int> sa;
void dfs(int n, int b, int p_edge){
czy[n] = true;
color[n] = b;
for(auto& p : adj[n]) {
int o = p.first;
int id = p.second;
if(id == p_edge) continue;
if(czy[o]) {
if(!czy_krawedz[id]) {
czy_krawedz[id] = true;
na.push_back(id);
}
} else {
czy_krawedz[id] = true;
dfs(o, b, id);
}
}
}
int main() {
ios_base::sync_with_stdio (0);
cin.tie(0);
int a, k, n;
cin >> n;
for(int i = 1; i < n; i++){
cin >> a >> k;
adj[a].push_back({k, i});
adj[k].push_back({a, i});
}
int licznik = 0;
for(int i = 1; i <= n; i++){
if(!czy[i]){
licznik++;
sa.push_back(i);
dfs(i, licznik, 0);
}
}
licznik--;
cout<<licznik<< endl;
for(int i = 0; i < licznik; i++){
cout << na[i] << " " << sa[0] << " " << sa[i + 1] <<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTiA9IDUwMDA2NzsKCnZlY3RvcjxwYWlyPGludCwgaW50Pj4gYWRqW05dOyAKaW50IGNvbG9yW05dOwpib29sIGN6eVtOXTsKYm9vbCBjenlfa3Jhd2VkeltOXTsKdmVjdG9yPGludD4gbmE7CnZlY3RvcjxpbnQ+IHNhOwoKdm9pZCBkZnMoaW50IG4sIGludCBiLCBpbnQgcF9lZGdlKXsKICAgIGN6eVtuXSA9IHRydWU7CiAgICBjb2xvcltuXSA9IGI7CiAgICAKICAgIGZvcihhdXRvJiBwIDogYWRqW25dKSB7CiAgICAgICAgaW50IG8gPSBwLmZpcnN0OwogICAgICAgIGludCBpZCA9IHAuc2Vjb25kOwogICAgICAgIAogICAgICAgIGlmKGlkID09IHBfZWRnZSkgY29udGludWU7CiAgICAgICAgCiAgICAgICAgaWYoY3p5W29dKSB7CiAgICAgICAgICAgIGlmKCFjenlfa3Jhd2VkeltpZF0pIHsKICAgICAgICAgICAgICAgIGN6eV9rcmF3ZWR6W2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICBuYS5wdXNoX2JhY2soaWQpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY3p5X2tyYXdlZHpbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgZGZzKG8sIGIsIGlkKTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyAgICAgICAgICAoMCk7CgljaW4udGllKDApOwoJaW50IGEsIGssICAgICAgICAgICAgICAgbjsKCWNpbiAgICAgICAgICAgID4+ICAgICAgICAgICBuOwoJCglmb3IoaW50IGkgPSAxOyAgICAgICAgICAgICAgICAgICAgICBpIDwgbjsgaSsrKXsKCQljaW4gPj4gYSAgICAgICAgICAgICAgICAgICAgPj4gazsKCQlhZGpbYV0ucHVzaF9iYWNrKHtrLCBpfSk7CgkJYWRqW2tdLnB1c2hfYmFjayh7YSwgaX0pOwoJfQoJCglpbnQgbGljem5payA9IDA7Cglmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJaWYoIWN6eVtpXSl7CgkJCWxpY3puaWsrKzsKCQkJc2EucHVzaF9iYWNrKGkpOwoJCQlkZnMoaSwgbGljem5paywgMCk7CgkJfQoJfQoJCglsaWN6bmlrLS07Cgljb3V0PDxsaWN6bmlrPDwgICAgICAgICBlbmRsOwoJCglmb3IoaW50IGkgPSAwOyBpIDwgICAgbGljem5pazsgaSsrKXsKCSAgICBjb3V0IDw8IG5hW2ldIDw8ICIgIiA8PCBzYVswXSA8PCAiICIgPDwgICAgICAgc2FbaSArIDFdIDw8ZW5kbDsKCX0KCglyZXR1cm4gMDsKfQ==