Everybody knows what an arithmetic progression is. Let us remind you just in case that an arithmetic progression is such sequence of numbers a1, a2, ..., an of length n, that the following condition fulfills: 

a2 - a1 = a3 - a2 = a4 - a3 = ... = ai + 1 - ai = ... = an - an - 1.

For example, sequences [1, 5], [10], [5, 4, 3] are arithmetic progressions and sequences [1, 3, 2], [1, 2, 4] are not.

Alexander has n cards containing integers. Arthur wants to give Alexander exactly one more card with a number so that he could use the resulting n + 1 cards to make an arithmetic progression (Alexander has to use all of his cards).

Arthur has already bought a card but he hasn't written a number on it. Help him, print all integers that you can write on a card so that the described condition fulfilled.

Input

The first line contains integer n (1 ≤ n ≤ 105) — the number of cards. The next line contains the sequence of integers — the numbers on Alexander's cards. The numbers are positive integers, each of them doesn't exceed 108.

Output

If Arthur can write infinitely many distinct integers on the card, print on a single line -1.

Otherwise, print on the first line the number of integers that suit you. In the second line, print the numbers in the increasing order. Note that the numbers in the answer can exceed 108 or even be negative (see test samples).

Examples

Input

3
4 1 7


Output

2
-2 10


Input

1
10


Output

-1


Input

4
1 3 5 9


Output

1
7


Input

4
4 3 4 5


Output

0


Input

2
2 4


Output

3
0 3 6
import java.util.*;
/**
 * 从一个无序的数组中，插入一个数字使该数组成为一个等差数组：解出该数字
 *         // 该数字要么在2端，或者中间
 *         // 1. 若数数字在2端，那么原数组已经是等差数组了。证原数组是一个等差数组
 *         // 2. 若在中间，就是在1, n - 2 的任意位置插入该数字且要证插入后，数组为一个等差数组
 *         // key: 排序数组怎么为一个等差数组？
 */

/**
 * @author lc
 * @date 2020/07/05
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = Integer.parseInt(scanner.nextLine());
        int[] card = new int[num];
        for (int i = 0; i < num; i++) {
            card[i] = scanner.nextInt();
        }
        Arrays.sort(card);
        insertValJudgeIsArithmetic(card);
    }

    /**
     * 判断一个有序数组是否为等差数组
     * O(n)
     * @param arr
     * @return
     */
    public static boolean isArithmetic(int[] arr, int start, int end, int sub) {
        for (int i = start; i <= end - 1; i++) {
            if (sub != arr[i + 1] - arr [i]) {
                return false;
            }
        }
        return true;
    }

    public static void insertValJudgeIsArithmetic(int[] arr) {
        int len = arr.length;
        boolean isAri = false; // 原数组是否是等比数组
        if (len == 1) {
            System.out.println(-1);
            return;
        }
        if (isArithmetic(arr, 0, len - 1,arr[1] - arr[0])) {
            if (arr[1] == arr[0]) {
                System.out.println(1);
                System.out.println(arr[0]);
                return;
            } else {
                isAri = true;
            }
        }
        int sub;
        LinkedList<Integer> resList = new LinkedList<>();
        if (isAri) resList.add(arr[0] - (arr[1] - arr[0]));
        for (int i = 0; i < len - 1; i++) {
            if ((arr[i] + arr[i+1]) % 2 == 0) {
                int value = (arr[i] + arr[i+1]) >> 1;
                sub = value - arr[i];
                if (isArithmetic(arr, 0, i, sub) && isArithmetic(arr, i+1, len - 1, sub)) {
                    resList.add(value);
                    break;
                }
            }
        }
        if (isAri) resList.add(arr[len -1] + arr[len - 1] - arr[len - 2]);
        if (resList.isEmpty()) {
            System.out.println(0);
        } else {
            System.out.println(resList.size());
            Iterator<Integer> it = resList.iterator();
            while (true) {
                int item = it.next();
                if (it.hasNext()) {
                    System.out.print(item + " ");
                } else {
                    System.out.print(item);
                    break;
                }
            }
        }
    }
}
	   					   		  				   			 			