#include <bits/stdc++.h>
using namespace std;
const int p = 998244853;
struct edge {
  int to, nxxt;
} e[2000002 << 1];
int prim[2000002], tot, n, head[2000002], cnt = 1, ha[2000002], siz[2000002],
                                          sum, ans, rt;
bool isp[2000002];
map<int, int> mp;
inline void ins(int u, int v) {
  e[cnt] = (edge){v, head[u]};
  head[u] = cnt++;
}
void df5(int te, int la) {
  siz[te] = ha[te] = 1;
  for (int i = head[te]; i; i = e[i].nxxt) {
    int j = e[i].to;
    if (j == la) continue;
    df5(j, te);
    siz[te] += siz[j];
    ha[te] = (ha[te] + 1ll * ha[j] * prim[siz[j]] % p) % p;
  }
  mp[ha[te]]++;
  if (mp[ha[te]] == 1) sum++;
}
void dfs(int te, int la) {
  if (sum > ans) ans = sum, rt = te;
  for (int i = head[te]; i; i = e[i].nxxt) {
    int j = e[i].to;
    if (j == la) continue;
    int sj = siz[j], hj = ha[j], ht = ha[te];
    mp[ha[te]]--;
    if (!mp[ha[te]]) sum--;
    mp[ha[j]]--;
    if (!mp[ha[j]]) sum--;
    siz[te] -= siz[j];
    ha[te] = (ha[te] - 1ll * ha[j] * prim[siz[j]] % p + p) % p;
    siz[j] += siz[te];
    ha[j] = (ha[j] + 1ll * ha[te] * prim[siz[te]] % p) % p;
    mp[ha[te]]++;
    if (mp[ha[te]] == 1) sum++;
    mp[ha[j]]++;
    if (mp[ha[j]] == 1) sum++;
    dfs(j, te);
    mp[ha[te]]--;
    if (!mp[ha[te]]) sum--;
    mp[ha[j]]--;
    if (!mp[ha[j]]) sum--;
    siz[j] = sj, siz[te] = n;
    ha[j] = hj, ha[te] = ht;
    mp[ha[te]]++;
    if (mp[ha[te]] == 1) sum++;
    mp[ha[j]]++;
    if (mp[ha[j]] == 1) sum++;
  }
}
int main() {
  for (int i = 2; i <= 2000000; i++) isp[i] = 1;
  for (int i = 2; i <= 2000000; i++) {
    if (isp[i]) prim[++tot] = i;
    for (int j = 1; j <= tot && prim[j] * i <= 2000000; j++) {
      isp[prim[j] * i] = 0;
      if (i % prim[j] == 0) break;
    }
  }
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    ins(x, y), ins(y, x);
  }
  df5(1, 1);
  dfs(1, 1);
  printf("%d\n", rt);
}
