"""一般情况:
	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))