#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define FRR(file) freopen(file,"r",stdin)
#define FRW(file) freopen(file,"w",stdout)
#define TIMESTAMP cerr<<fixed<<setprecision(3)<<clock()*1.0/CLOCKS_PER_SEC<<"s"<<endl;
#define _rep(i,a,b) for (int i=(a);i<=(b);++i)
#define _reps(i,a,b,c) for (int i=(a);i<=(b);c)
#define _rrep(i,a,b) for (int i=(a);i>=(b);--i)
#define _rreps(i,a,b,c) for (int i=(a);i>=(b);c)
#define _iter(i,a) for (auto i=a.begin();i!=a.end();++i)
#define _graph(i,u) for (int i=h[u];~i;i=ne[i])
#define rint register int
#define LL long long
typedef pair<int,int> pii;
const int N=100005;
int n;
int sz[N];
vector<int> vec[N];
extern "C" bool ask(int k);
void dfs(int u) {
sz[u]=1;
_iter(it,vec[u]) {
dfs(*it);
sz[u]+=sz[*it];
}
}
extern "C" int solve(int n,vector<int> p) {
_rep(i,0,(int)p.size()-1) vec[p[i]].emplace_back(i+2);
dfs(1);
int cur=1;
int debug=1;
vector<int> arr;
while (true) {
if (vec[cur].size()==1) {
arr.emplace_back(cur);
cur=vec[cur][0];
continue;
}
if (vec[cur].empty()) {
arr.emplace_back(cur);
break;
}
if (sz[vec[cur][0]]<sz[vec[cur][1]]) swap(vec[cur][0],vec[cur][1]);
int t=ask(vec[cur][0]);
debug++;
if (t) {
arr.clear();
cur=vec[cur][0];
continue;
}
arr.emplace_back(cur);
cur=vec[cur][1];
}
int l=0,r=(int)arr.size()-1;
while (l<r) {
int mid=(l+r>>1)+1;
debug++;
if (ask(arr[mid])) l=mid;
else r=mid-1;
}
return arr[l];
}