int n; vector<int> adj[maxn]; int dep[maxn], siz[maxn]; ll f[maxn];
voiddfs1( int u, int p ){ siz[u] = 1, dep[u] = p ? dep[p] + 1 : 0; f[1] += dep[u]; for( int v : adj[u] ) { if( v == p ) continue; dfs1( v, u ); siz[u] += siz[v]; } }
voiddfs2( int u, int p ){ for( int v : adj[u] ) { if( v == p ) continue; f[v] = f[u] - siz[v] + n - siz[v]; dfs2( v, u ); } }
voidsolve( ){ n = read( ); for( int i = 1; i < n; ++ i ) { int u = read( ), v = read( ); adj[u].push_back( v ); adj[v].push_back( u ); } dfs1( 1, 0 ); dfs2( 1, 0 );
int rt = 1; for( int i = 2; i <= n; ++ i ) { if( f[i] > f[rt] ) rt = i; } printf( "%d\n", rt ); }