#include<bits/stdc++.h>
const long long maxn=2e6+1;
inline const void read(long long &a)
{
char c=getchar();a=0;
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')
{
a=(a<<1)+(a<<3)+c-'0';
c=getchar();
}
}
long long n,d=0,kk=1;
long long point[maxn],next[maxn],father[maxn],to[maxn],ans[maxn],num[maxn],sum[maxn],deep[maxn];
bool vis[maxn];
inline const void add(long long a,long long b)
{
next[++d]=point[a];
point[a]=d;
to[d]=b;
}
inline const void dfs1(long long p)
{
vis[p]=true;
long long side=point[p];
num[p]=1;sum[p]+=deep[p];
while(side)
{
if(!vis[to[side]])
{
father[to[side]]=p;
deep[to[side]]=deep[p]+1;
dfs1(to[side]);
num[p]+=num[to[side]];sum[p]+=sum[to[side]];
}
side=next[side];
}
}
inline const void dfs2(long long p)
{
if(p!=1)ans[p]=ans[father[p]]-2*num[p]+num[1];
if(ans[p]>ans[kk])kk=p;
if(ans[p]==ans[kk]&&p<kk)kk=p;
vis[p]=true;
long long side=point[p];
while(side)
{
if(!vis[to[side]])dfs2(to[side]);
side=next[side];
}
}
int main()
{
memset(father,0,sizeof(father));
memset(sum,0,sizeof(sum));
memset(point,0,sizeof(point));
memset(ans,0,sizeof(ans));
read(n);
long long u,v;
for(long long i=1;i<=n-1;i++){read(u);read(v);add(u,v);add(v,u);}
deep[1]=0;
memset(vis,false,sizeof(vis));
dfs1(1);
memset(vis,false,sizeof(vis));ans[1]=sum[1];
std::cout<<std::endl;
dfs2(1);
std::cout<<kk;
return 0;
}