/* Date:2010-6-4 Author:surpasser */ //#define LOCAL #include<iostream> using namespace std; int upOrdown[201]; int q[201]; int visit[201]; int dis[201]; void bfs(int i,int n) { int front,rear,u,up,down; front=rear=0; visit[i]=1; q[rear++]=i; while(front<rear) { u=q[front++]; up=u+upOrdown[u]; down=u-upOrdown[u]; if(up<=n&&!visit[up]) { visit[up]=1; q[rear++]=up; dis[up]=dis[u]+1; } if(down>=1&&!visit[down]) { visit[down]=1; q[rear++]=down; dis[down]=dis[u]+1; } } } int main() { #ifdef LOCAL freopen("test.txt","r",stdin); #endif int n,A,B,i; while(cin>>n&&n!=0) { memset(visit,0,sizeof(visit)); memset(dis,0,sizeof(dis)); cin>>A>>B; for(i=1;i<=n;i++) cin>>upOrdown[i]; bfs(A,n); if(A!=B&&dis[B]) cout<<dis[B]<<endl; else if(A==B) cout<<"0"<<endl; else cout<<"-1"<<endl; } return 0; }