//Codeforces Round #224 (Div. 2) C Arithmetic Progression
import java.io.*;
import java.math.*;
import java.util.*;
//Codeforces
public class MainCodeforces1 {
 private static MyScanner in;
 private static PrintStream out;
 private static boolean LOCAL_TEST = false;
 private static void solve() throws IOException
 {
  int n = in.nextInt();
  int[] x = new int[n];
  for (int i = 0; i < x.length; i++) {
   x[i] = in.nextInt();
  }
  ArrayList<Integer> ansList = new ArrayList<Integer>();
  if (n == 1) {
   out.println(-1);
   return;
  }
  else {
   Arrays.sort(x);
   int minDiff = Integer.MAX_VALUE;
   if (n == 2) {
    if ((x[1] - x[0]) % 2 == 0) {
     minDiff = (x[1] - x[0]);
     ansList.add(x[0] - minDiff);
     if (minDiff > 0)
      ansList.add(x[0] + minDiff / 2);
     if (minDiff > 0)
      ansList.add(x[1] + minDiff);
    }
    else {
     minDiff = (x[1] - x[0]);
     ansList.add(x[0] - minDiff);
     ansList.add(x[1] + minDiff);
    }
   }
   else {
    HashSet<Integer> diffSet = new HashSet<Integer>();
    for (int i = 1; i < x.length; i++) {
     int diff = x[i] - x[i - 1];
     diffSet.add(diff);
     minDiff = Math.min(diff, minDiff);
    }
    if (diffSet.size() == 1) {
     ansList.add(x[0] - minDiff);
     if (minDiff > 0)
      ansList.add(x[x.length - 1] + minDiff);
    }
    else if (diffSet.size() > 2) {
     out.println(0);
     return;
    }
    else {// if (diffSet.size() == 2) {
     if (minDiff == 0) {
      out.println(0);
      return;
     }
     boolean added = false;
     for (int i = 0; i < x.length - 1; i++) {
      if (x[i + 1] - x[i] == minDiff)
       continue;
      else if (x[i + 1] - x[i] == 2 * minDiff) {
       if (!added) {
        ansList.add(x[i] + minDiff);
        added = true;
       }
       else {
        out.println(0);
        return;
       }
      }
      else {
       out.println(0);
       return;
      }
     }
    }
   }
  }
  out.println(ansList.size());
  for (int i = 0; i < ansList.size(); i++) {
   out.print(ansList.get(i));
   out.print(" ");
  }
 }
 public static void main(String[] args) throws IOException {
  // helpers for input/output
  out = System.out;
  try {
   String cname = System.getenv("COMPUTERNAME");
   if (!cname.equals(""))
    LOCAL_TEST = true;
  } catch (Exception e) {
  }
  if (LOCAL_TEST) {
   in = new MyScanner("E:\\zin.txt");
  }
  else {
   boolean usingFileForIO = false;
   if (usingFileForIO) {
    // using input.txt and output.txt as I/O
    in = new MyScanner("input.txt");
    out = new PrintStream("output.txt");
   }
   else {
    in = new MyScanner();
    out = System.out;
   }
  }
  solve();
 }
 // =====================================
 static class MyScanner {
  BufferedReader bufReader;
  StringTokenizer strTok;
  public MyScanner() throws IOException
  {
   bufReader = new BufferedReader(new InputStreamReader(System.in));
   strTok = new StringTokenizer("");
  }
  public MyScanner(String inputFile) throws IOException {
   bufReader = new BufferedReader(new InputStreamReader(new FileInputStream(
     inputFile)));
   strTok = new StringTokenizer("");
  }
  String GetNextToken() throws IOException {
   if (!strTok.hasMoreTokens())
    strTok = new StringTokenizer(bufReader.readLine());
   return strTok.nextToken();
  }
  public int nextInt() throws IOException {
   return Integer.valueOf(GetNextToken());
  }
  public long nextLong() throws IOException {
   return Long.valueOf(GetNextToken());
  }
  public double nextDouble() throws IOException {
   return Double.valueOf(GetNextToken());
  }
  public String nextString() throws IOException {
   return GetNextToken();
  }
  public String nextLine() throws IOException {
   return bufReader.readLine();
  }
  public int countTokens() {
   return strTok.countTokens();
  }
  public boolean hasMoreTokens() {
   return strTok.hasMoreTokens();
  }
 }
}
No comments:
Post a Comment