关于序列 {S} 定义 f(S)=gcd(S1,S2,⋯,Sn)。
我们熟知 gcd 运算具有结合律,即 gcd(a,b,c,⋯)=gcd(a,gcd(b,c,⋯)),可以轻松算出 f(S)。
然而 Patricky 认为,那些 f(S)=1 的序列太过朴素。现在给定 {S},他希望您能用下面的操作修改 {S} 使得 f(S)≥2 :
- 选择 i,i+1(i=n),将 ⟨Si,Si+1⟩ 修改为 ⟨Si−1,Si+1+1⟩
- 选择 i,i+1(i=n),将 ⟨Si,Si+1⟩ 修改为 ⟨Si+1,Si+1−1⟩
试回答使得 f(S)≥2 的 最小 操作次数,或回答不可能。
输入格式
输入包含两行,第一行有一个整数 n,表示 {S} 的大小。
接下来一行包含 n 个用空格分隔的整数,依次表示 S1,S2,⋯,Sn。
输出格式
输出使得 f(S)≥2 的最小操作次数。如果不可能,则在一行中输出 −1。
数据规模
- 1≤n≤105
- Si∈{0,1} 但保证 i=1∑nSi≥1,即元素不同时为 0。
样例 1 输入
3
1 0 1
样例 1 输出
2
解释:
[1,0,1]→[0,1,1]→[0,0,2]
样例 2 输入
3
0 0 1
样例 2 输出
-1
Bonus: How to solve the problem if 1≤n≤106,0≤Si≤106 ? Try http://oj.daimayuan.top/problem/883 !