#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
using namespace std;
int head[200005],tot;
int du[200005];
struct E
{
int nxt,to;
};
struct E e[200005<<1];
void add(int x,int y)
{
e[++tot].nxt = head[x];
head[x] = tot;
e[tot].to = y;
e[++tot].nxt = head[y];
head[y] = tot;
e[tot].to = x;
}
queue<int> sons[200005];
int anss[200005][2],anscnt;
void dfs(int x,int fa)
{
char isson = 1;
int tomatch = 0;
int i;
for(i=head[x];i;i=e[i].nxt)
{
if (e[i].to!=fa)
{
dfs(e[i].to,x);
isson = 0;
tomatch += sons[e[i].to].size();
}
}
if(isson)
{
sons[x].push(x);
}
queue<int> son2,son1;
for(i=head[x];i;i=e[i].nxt)
{
if(e[i].to!=fa)
{
if(sons[e[i].to].size()==2)
{
son2.push(e[i].to);
}
else if(sons[e[i].to].size()==1)
{
son1.push(e[i].to);
}
}
}
if (son2.size()%2==1 && son1.size() == 0 && son2.size()!=1)
{
int x1=son2.front();
son2.pop();
int x2=son2.front();
son2.pop();
int x3=son2.front();
son2.pop();
anss[anscnt+1][0]=sons[x1].front();
sons[x1].pop();
anss[anscnt+1][1]=sons[x2].front();
sons[x2].pop();
anss[anscnt+2][0]=sons[x1].front();
sons[x1].pop();
anss[anscnt+2][1]=sons[x3].front();
sons[x3].pop();
son1.push(x2);
son1.push(x3);
anscnt+=2;
}
while(son2.size()>=2)
{
int x1 = son2.front();
son2.pop();
int x2 = son2.front();
son2.pop();
anss[anscnt+1][0] = sons[x1].front();
sons[x1].pop();
anss[anscnt+1][1] = sons[x2].front();
sons[x2].pop();
son1.push(x1);
son1.push(x2);
anscnt++;
}
while(son2.size()*2 + son1.size() > 2)
{
if (son2.size())
{
int x1 = son2.front();
son2.pop();
int x2 = son1.front();
son1.pop();
anss[anscnt+1][0] = sons[x1].front();
sons[x1].pop();
anss[anscnt+1][1] = sons[x2].front();
sons[x2].pop();
son1.push(x1);
anscnt++;
}
else
{
int x1 = son1.front();
son1.pop();
int x2 = son1.front();
son1.pop();
anss[anscnt+1][0] = sons[x1].front();
sons[x1].pop();
anss[anscnt+1][1] = sons[x2].front();
sons[x2].pop();
anscnt++;
}
}
for(i = head[x];i;i=e[i].nxt)
{
if (e[i].to!=fa)
{
while (sons[e[i].to].size())
{
int tmp = sons[e[i].to].front();
sons[x].push(tmp);
sons[e[i].to].pop();
}
}
}
}
int main()
{
int n;
scanf("%d",&n);
int x,y;
int i;
for(i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
du[x]++;
du[y]++;
}
if(n==1)
{
printf("1\n1 1\n");
return 0;
}
if(n==2)
{
printf("1\n1 2\n");
return 0;
}
for(i=1;i<=n;i++)
{
if(du[i]!=1)
{
dfs(i,0);
if(sons[i].size()==2)
{
anscnt++;
anss[anscnt][0]=sons[i].front();
sons[i].pop();
anss[anscnt][1]=sons[i].front();
}
else
{
anscnt++;
anss[anscnt][0]=sons[i].front();
anss[anscnt][1]=i;
}
break;
}
}
printf("%d\n",anscnt);
for(i=1;i<=anscnt;i++)
{
printf("%d %d\n",anss[i][0],anss[i][1]);
}
return 0;
}