#include <bits/stdc++.h>
using namespace std;
vector <int> adiacenta[500001];
int cantitate[500001] , ordine[500001];
int Calcul (const int nod , const int sursa)
{
cantitate[nod] = (adiacenta[nod].size() == 1 ? 1 : 0);
for (auto& vecin : adiacenta[nod]) {
if (vecin != sursa)
{ cantitate[nod] += Calcul(vecin , nod); }
}
return cantitate[nod];
}
void Parcurgere (const int nod , const int sursa)
{
if (adiacenta[nod].size() == 1)
{ ordine[++ordine[0]] = nod; }
for (auto& vecin : adiacenta[nod]) {
if (vecin != sursa)
{ Parcurgere(vecin , nod); }
}
}
int main ()
{
ios :: sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int numar_noduri;
cin >> numar_noduri;
for (int indice = 1 ; indice < numar_noduri ; indice++)
{
int nod[2]; cin >> nod[0] >> nod[1];
adiacenta[nod[0]].push_back(nod[1]);
adiacenta[nod[1]].push_back(nod[0]);
}
Calcul(1 , 0);
int radacina = 1;
while (true)
{
bool gasit = false;
for (auto& vecin : adiacenta[radacina]) {
if (cantitate[vecin] > cantitate[radacina] / 2)
{
gasit = true;
cantitate[radacina] -= cantitate[vecin];
cantitate[vecin] += cantitate[radacina];
radacina = vecin;
break;
}
}
if (!gasit)
{ break; }
}
Parcurgere(radacina , 0);
cout << (ordine[0] + 1) / 2 << '\n';
for (int indice = 1 ; indice <= (ordine[0] + 1) / 2 ; indice++)
{ cout << ordine[indice] << ' ' << ordine[indice + ordine[0] / 2] << '\n'; }
return 0;
}