#pragma GCC optimize("Ofast") #pragma GCC target("avx2") char*mmap(); #define rd(v) long v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;} #define wt(v) {long _z=v;do*--wp=_z%10+48;while(_z/=10);} #define rep3(v,s,e) for(long v=s;v>8|a[i]<<24; } } void radix_sort(unsigned*a,int n){ radix_sort_aux(a,a+n,n); radix_sort_aux(a+n,a,n); radix_sort_aux(a,a+n,n); radix_sort_aux(a+n,a,n); } long locate(int*s,int n,int a){ long lo=-1,hi=n; while(lo>1; if(a=0&&s[lo]==a?lo:-1; } int s[50002*2]; int q[50002]; char vis[50002]; main(){ char*rp=mmap(0l,1l<<25,1,2,0,0ll); rd(n); rd(st); rd(ed); s[0]=st; s[1]=ed; n+=2; rep3(i,2,n){ rd(si); s[i]=si; } radix_sort(s,n); long edl=locate(s,n,ed); long qr=0,qw=0,d=0; q[qw++]=locate(s,n,st); while(qr=0){ if(!vis[bl]){ vis[bl]=1; q[qw++]=bl; } } } } ++d; } write(1,"-1",2); _exit(0); }