#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5 + 5;
int n;
vector<int> g[N];
vector<pair<int, int> > ans;
bool vis[N];
vector<int> l;
void dfs(int u) {
bool f = true;
vis[u] = true;
for (int v : g[u]) {
if (!vis[v]) {
f = false;
dfs(v);
}
}
if (f) {
l.emplace_back(u);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n - 1; i++) {
int a, b;
cin >> a >> b;
g[a].emplace_back(b);
g[b].emplace_back(a);
}
for (int i = 1; i <= n; i++) {
sort(g[i].begin(), g[i].end());
}
dfs(1);
int x = 0, y = (int) l.size() - 1;
while (x <= y) {
if (x == y) {
ans.emplace_back(l[x], l.back());
break;
}
ans.emplace_back(l[x], l[y]);
x++;
y--;
}
cout << ans.size() << '\n';
for (auto x : ans) {
cout << x.first << ' ' << x.second << '\n';
}
return 0;
}