#include<bits/stdc++.h>
typedef int ll;
#define pii pair<ll, ll>
#define fi first
#define se second
#define endl '\n'
#define TASK ""
#define N 500005
#define LOG 17
using namespace std;
const ll inf = 1e9;
bool ghuy4g;
ll n, r;
vector<ll> adj[N];
vector<ll> leaves;
void dfs(ll u, ll parent) {
	for (auto v : adj[u]) {
		if (v == parent) continue;
		dfs(v, u);
	}
	if (adj[u].size() == 1) {
		leaves.push_back(u);
	}
}
bool klinh;
signed main() {
   // freopen("test.inp", "r", stdin);
	//freopen("test.out", "w", stdout);
	//srand(time(0));
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
   	cin >> n;
   	for (int i = 1; i <= n - 1; i ++) {
   		ll u, v;
   		cin >> u >> v;
   		adj[u].push_back(v);
   		adj[v].push_back(u);
   	}
   	
   	for (int i = 1; i <= n; i ++) {
   		if (adj[i].size() > 2) {
   			r = i;
   			break;
   		}
   	}
   	
   	dfs(r, r);
   	
   	cout << (leaves.size() + 1) / 2 << endl;
   	for (int i = 0; i < leaves.size(); i += 2) {
   		if (leaves.size() % 2 == 1 && i == leaves.size() - 1) {
   			cout << leaves[i - 1] << " " << leaves[i] << endl;
   			break;
   		}
   		cout << leaves[i] << " " << leaves[i + 1] << endl;
   	}
   	
   	
   	cerr << fabs(&klinh - &ghuy4g) / double(1024 * 1024);
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |