#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000")
using namespace std;
const int N = 100010;
vector<int> m[N];
int n, u[N], d[N], p[N];
pair<double, double> h[N];
void dfs(int i) {
  u[i] = 1;
  for (auto j : m[i])
    if (!u[j]) {
      d[j] = d[i] + 1;
      p[j] = i;
      dfs(j);
    }
}
int fndlong(int i) {
  for (int j = 0; j < n; u[j] = 0, j++)
    ;
  int bj = 0;
  d[i] = 0;
  dfs(i);
  for (int j = 0; j < n; j++)
    if (d[j] > d[bj]) bj = j;
  return bj;
}
void insv(int i, int j) {
  m[i].erase(find(m[i].begin(), m[i].end(), j));
  m[j].erase(find(m[j].begin(), m[j].end(), i));
  m[i].push_back(n);
  m[j].push_back(n);
  m[n].push_back(i);
  m[n].push_back(j);
}
map<pair<double, double>, int> w;
void dfs2(int i) {
  u[i] = 1;
  vector<pair<double, double> > d;
  for (auto j : m[i])
    if (!u[j]) {
      dfs2(j);
      d.push_back(h[j]);
    }
  sort(d.begin(), d.end());
  h[i] = {0, 0};
  for (auto x : d) {
    h[i].first += cos(x.first + 1);
    h[i].second += sin(x.second + 1);
  }
  w[h[i]]++;
}
void dfs3(int i) {
  u[i] = 1;
  p[i] = -1;
  d[i] = 0;
  for (auto j : m[i])
    if (!u[j]) {
      dfs3(j);
      if (d[j] > d[i]) {
        d[i] = d[j];
        p[i] = j;
      }
    }
  d[i] += w[h[i]] > 1;
}
int main() {
  int i, j, k;
  scanf("%d", &n);
  for (k = n - 1; k--;
       scanf("%d%d", &i, &j), i--, j--, m[i].push_back(j), m[j].push_back(i))
    ;
  i = fndlong(0);
  i = fndlong(i);
  j = fndlong(i);
  int l = 0;
  for (k = j; k != i; l++, k = p[k])
    ;
  int c = l / 2;
  for (k = j; c > 0; c--, k = p[k])
    ;
  c = k;
  if (l % 2) {
    insv(c, p[c]);
    c = n;
    n++;
  }
  for (i = 0; i < n; u[i] = 0, i++)
    ;
  dfs2(c);
  for (i = 0; i < n; u[i] = 0, i++)
    ;
  dfs3(c);
  for (i = c; p[i] != -1; i = p[i])
    ;
  printf("%d\n", i + 1);
  return 0;
}
