2.新飞行棋 

2.新飞行棋 

Description

期末考试终于结束了。Andy同学感觉松了一口气,他决定重温小时候的快乐时光--下飞行棋。
但是他弄丢了传统飞行棋需要的骰子,因此他发明了一种新型的飞行棋游戏,规则如下:棋盘上有n个格子,由近到远分别编号为1到n。对于1<=i<=n,第i个格子上写着一个正整数Ni。当玩家处于第a个格子时,他可以选择往后走Na步,或者往前倒退Na步。当然如果Na+a>n,那么他就只能选择后退;同理如果a-Na<1,那么他就只能选择前进。保证不会出现既不能前进又不能后退的格子。
Andy学完编程后对一个问题很感兴趣:从编号s出发,至少需要经过几把,可以到达t点?(例如在a点选择往前走Na步,称之为一把)。

Format

Input

从文件fly.in中读取数据。
第一行三个整数,分别为n,s,t意义如题面所述。
第二行n个正整数,第i个数为Ni。

Output

输出到文件fly.out中去。
一个数,为最少经过的把数。如果s无法到达t,输出-1。

Sample 1

Input

6 6 4
1 2 2 3 1 2

Output

1

Limitation

1s, 128MiB for each test case.
对于前10%的数据,s=t;
对于前40%的数据,n<=200;
对于另外10%的数据,s无法到达t;
对于100%的数据,n<=200000;