"""一般情况:
1. 直接dp[i][j]保存区间[i,j]的分割答案,状态转移时尝试一分、二分、三分...直到(j-i)//2分,时间复杂度o(n³),基本不可接受.优化方案的话,我是菜鸡,想不出来
2. 贪心+回溯,每次都优先匹配最外层的(这样总次数更少且更可能把不合法的整数删除),计算删去后是否符合要求——能继续切割或已切割完
具体实现中:
基本的不合法情况为:如果有哪个数的计数为1,且它在端点,则无法切割(包含了只剩一个数的最基本情况)
固定左指针为0,移动右指针(从n-1开始),在左右指针相碰时都没有解时返回-1,因为如果可分,那一定能分为完全不相干的几块,那么最左边必然是某块的边界
每次分割后减去被减数组的Counter,进行判断"""
# 对于只有01的,实际上检查就简单了很多,只有一次删除和分两次删除的可能
def min_operations(arr):
n = len(arr)
if n < 2:
return -1
# 情况1: 整个数组首尾相同,一次操作
if arr[0] == arr[-1]:
return 1
# 情况2: 寻找分割点,区间为 [1, n-3]
for i in range(1, n-2):
if arr[0] == arr[i] and arr[i+1] == arr[-1]:
return 2
return -1
if __name__ == '__main__':
n = input()
data = list(map(int, input().split()))
print(min_operations(data))