#include <queue>
#include <vector>

using namespace std;
const int MAXN = 100 * 1000 + 10;

bool mark[MAXN];
vector<int> adj[MAXN];    //  لیست مجاورت رأس‌ها

int n;       // تعداد رأس‌ها

int bfs(int v) {
    int far = 0;
    queue<int> q;                // صفی که رأس‌ها در آن قرار می‌گیریند
    queue<int> depth;            // صفی که ارتفاع رأس‌های متناظر در صف بالا قرار دارند

    mark[v] = 1;
    q.push(v);
    depth.push(0);              // ارتفاع ریشه از خودش صفر است

    while(q.size()) {
        v = q.front();
        far = depth.front();
        q.pop();
        depth.pop();

        for(unsigned int i = 0; i < adj[v].size(); i++) {
            int u = adj[v][i];

            if (mark[u] == 1)
                continue;

            mark[u] = 1;
            q.push(u);
            depth.push(far + 1);      // ارتفاع همسایه‌یک واحد بیشتر از ارتفاع این رأس است
        }

    }

    return far;
}

int find_center()
{
    int dist = 1<<30;              // تقریبا بینهایت برای اینکه در کمینه تاثیری نگذارد و شعاع را نگه می‌دارد
    int v = 0;                     // مرکز گراف را در این متغیر نگه می‌داریم
    for (int i = 0; i < n; i++)
    {
        int tmp = bfs(i);
        if(tmp < dist)
        {
            dist = tmp;
            v = i;
        }
    }
    return v;
}