import java.util.Arrays;
import java.util.Objects;
import java.util.Random;
import java.util.Scanner;
/**
* @author supermejane
* @date 2025/10/6
* @description BGN62 mex
*/
public class Main {
//1.观察再开始做,一开始就直接用死算很麻烦还不一定能通过
//2.三种情况
// 一:数组没0且不完全相同 -> 可能不能相等,输出-1
// 二:数组完全相同 -> 输出0
// 三:上述都不满足 -> 排序计算差分,将 diff[i] > 1的加起来就行
//3.注意精度
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
long[] a = new long[n], diff = new long[n + 1];
boolean isDiff = false, having_zero = false;
for (int i = 0; i < n; i++) {
a[i] = in.nextLong();
if (a[i] == 0) having_zero = true;
if (i > 0 && a[i] != a[i - 1]) isDiff = true;
}
if (!having_zero && isDiff) System.out.println(-1);
else if (!isDiff) System.out.println(0);
else {
long result = 0;
//sort(a, 0, a.length - 1, true);
Arrays.sort(a);
for (int i = 1; i < n; i++) {
diff[i] = i == 0 ? a[i] : a[i] - a[i - 1];
if (diff[i] > 1) result += diff[i] - 1;
}
System.out.println(result + 1);
}
}
//快排
// public static void sort(int[] a, int l, int r, boolean ascending) {
// if (r <= l) return;
// int pivot = partition(a, l, r, ascending);
// sort(a, l, pivot - 1, ascending);
// sort(a, pivot + 1, r, ascending);
// }
//
// public static int partition(int[] a, int l, int r, boolean ascending) {
// int index = new Random().nextInt(r - l + 1) + l;
// swap(a, index, r);
//
// int p1 = l - 1, p2;
// for (p2 = l; p2 < r; p2++) {
// //降序
// if (ascending ? a[p2] < a[r] : a[p2] > a[r]) {
// swap(a, p2, ++p1);
// }
// }
// swap(a, r, ++p1);
// return p1;
// }
//
// public static void swap(int[] a, int i, int j) {
// if (a[i] != a[j]) {
// int tmp = a[i];
// a[i] = a[j];
// a[j] = tmp;
// }
// }
//
// @Test
// public void test() {
// int[] a = new int[]{4, 1, 5, 6, 2, 7, 8, 3};
// sort(a, 0, a.length - 1, true);
// for (int j : a) {
// System.out.println(j);
// }
// }
}