int n,st,ed,k=0,step[210],lift[210];
bool pd=true;
int main()
{
scanf("%d %d %d",&n,&st,&ed);
for(int i=1;i<=n;i++) { step[i]=-1; scanf("%d",&lift[i]); }
step[st]=0;
while(pd && step[ed]==-1)
{
pd=false;
for(int i=1;i<=n;i++)
if(step[i]==k)
{
int j=i+lift[i];
if(j<=n && step[j]==-1) { step[j]=k+1; pd=true; }
j=i-lift[i];
if(j>0 && step[j]==-1) { step[j]=k+1; pd=true; }
}
k++;
}
printf("%d",step[ed]);
return 0;
}
#include<cstring>
int a[2100],fx[2]={1,-1},b[2100];
struct lol{int x,t;} d[2100];
int n,st,ed,ans=0;
void dfs()
{
d[1].x=st;d[1].t=0;a[st]=1;
int tou=1,wei=2;
while(tou!=wei)
{
for(int i=0;i<=1;i++)
{
int x=fx[i]*b[d[tou].x]+d[tou].x;
if(x==ed){ans=d[tou].t+1;return;}
if(x>0&&x<=n&&a[x]==0)
{
a[x]=1;d[wei].x=x;d[wei].t=d[tou].t+1;wei++;
}
}
tou++;
}
}
int main()
{
scanf("%d %d %d",&n,&st,&ed);
for(int i=1;i<=n;i++)scanf("%d",&b[i]);
memset(a,0,sizeof(a));
dfs();
printf("%d",ans);
}
#include<cstring>
int a[2100],fx[2]={1,-1},b[2100];
struct lol{int x,t;} d[2100];
int n,st,ed,ans=0;
void dfs()
{
d[1].x=st;d[1].t=0;a[st]=1;
int tou=1,wei=2;
while(tou!=wei)
{
for(int i=0;i<=1;i++)
{
int x=fx[i]*b[d[tou].x]+d[tou].x;
if(x==ed){ans=d[tou].t+1;return;}
if(x>0&&x<=n&&a[x]==0)
{
a[x]=1;d[wei].x=x;d[wei].t=d[tou].t+1;wei++;
}
}
tou++;
}
}
int main()
{
scanf("%d %d %d",&n,&st,&ed);
for(int i=1;i<=n;i++)scanf("%d",&b[i]);
memset(a,0,sizeof(a));
dfs();
printf("%d",ans);
}
int n,st,ed,k=0,step[210],lift[210];
bool pd=true;
int main()
{
scanf("%d %d %d",&n,&st,&ed);
for(int i=1;i<=n;i++) { step[i]=-1; scanf("%d",&lift[i]); }
step[st]=0;
while(pd && step[ed]==-1)
{
pd=false;
for(int i=1;i<=n;i++)
if(step[i]==k)
{
int j=i+lift[i];
if(j<=n && step[j]==-1) { step[j]=k+1; pd=true; }
j=i-lift[i];
if(j>0 && step[j]==-1) { step[j]=k+1; pd=true; }
}
k++;
}
printf("%d",step[ed]);
return 0;
}