#include <bits/stdc++.h>
using namespace std;
int sushu[2000005];
vector<int> v1, v2;
void shai() {
  memset(sushu, -1, sizeof(sushu));
  for (int i = 2; i <= sqrt(2000005); i++) {
    if (sushu[i] == 0) continue;
    for (int j = 2;; j++) {
      if (i * j > 2000005) break;
      sushu[i * j] = 0;
    }
  }
}
int main() {
  shai();
  int n, x;
  cin >> n;
  int sum = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    if (x == 1) sum++;
    if (x % 2)
      v1.push_back(x);
    else
      v2.push_back(x);
  }
  if (v1.size() == 0) {
    printf("1\n%d\n", v2[0]);
    return 0;
  }
  if (v2.size() == 0 && sum <= 1) {
    printf("1\n%d\n", v1[0]);
    return 0;
  }
  int ff = 0;
  if (sum == 0 || sum == 1) {
    for (int i = 0; i < v1.size(); i++) {
      for (int j = 0; j < v2.size(); j++) {
        if (sushu[v1[i] + v2[j]] == -1) {
          printf("2\n%d %d\n", v1[i], v2[j]);
          ff = 1;
          return 0;
        }
      }
    }
    if (ff == 0) {
      for (int i = 0; i < v1.size(); i++) {
        printf("1\n%d\n", v1[i]);
        return 0;
      }
      for (int i = 0; i < v2.size(); i++) {
        printf("1\n%d\n", v2[i]);
        return 0;
      }
    }
  }
  int flag = 0;
  if (sum >= 1 && v2.size() > 0) {
    for (int j = 0; j < v2.size(); j++) {
      if (sushu[1 + v2[j]] == -1) {
        flag = v2[j];
        break;
      }
    }
  }
  if (flag == 0) {
    printf("%d\n1", sum);
    for (int i = 1; i < sum; i++) printf(" 1");
    printf("\n");
  } else {
    printf("%d\n1", sum + 1);
    for (int i = 1; i < sum; i++) printf(" 1");
    printf(" %d\n", flag);
  }
  return 0;
}

### Prompt

Your task is to create a CPP solution to the following problem:

A tuple of positive integers {x1, x2, ..., xk} is called simple if for all pairs of positive integers (i, j) (1 ≤ i < j ≤ k), xi + xj is a prime.

You are given an array a with n positive integers a1, a2, ..., an (not necessary distinct). You want to find a simple subset of the array a with the maximum size.

A prime number (or a prime) is a natural number greater than 1 that has no positive divisors other than 1 and itself.

Let's define a subset of the array a as a tuple that can be obtained from a by removing some (possibly all) elements of it.

Input

The first line contains integer n (1 ≤ n ≤ 1000) — the number of integers in the array a.

The second line contains n integers ai (1 ≤ ai ≤ 106) — the elements of the array a.

Output

On the first line print integer m — the maximum possible size of simple subset of a.

On the second line print m integers bl — the elements of the simple subset of the array a with the maximum size.

If there is more than one solution you can print any of them. You can print the elements of the subset in any order.

Examples

Input

2
2 3


Output

2
3 2


Input

2
2 2


Output

1
2


Input

3
2 1 1


Output

3
1 1 2


Input

2
83 14


Output

2
14 83

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
int sushu[2000005];
vector<int> v1, v2;
void shai() {
  memset(sushu, -1, sizeof(sushu));
  for (int i = 2; i <= sqrt(2000005); i++) {
    if (sushu[i] == 0) continue;
    for (int j = 2;; j++) {
      if (i * j > 2000005) break;
      sushu[i * j] = 0;
    }
  }
}
int main() {
  shai();
  int n, x;
  cin >> n;
  int sum = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    if (x == 1) sum++;
    if (x % 2)
      v1.push_back(x);
    else
      v2.push_back(x);
  }
  if (v1.size() == 0) {
    printf("1\n%d\n", v2[0]);
    return 0;
  }
  if (v2.size() == 0 && sum <= 1) {
    printf("1\n%d\n", v1[0]);
    return 0;
  }
  int ff = 0;
  if (sum == 0 || sum == 1) {
    for (int i = 0; i < v1.size(); i++) {
      for (int j = 0; j < v2.size(); j++) {
        if (sushu[v1[i] + v2[j]] == -1) {
          printf("2\n%d %d\n", v1[i], v2[j]);
          ff = 1;
          return 0;
        }
      }
    }
    if (ff == 0) {
      for (int i = 0; i < v1.size(); i++) {
        printf("1\n%d\n", v1[i]);
        return 0;
      }
      for (int i = 0; i < v2.size(); i++) {
        printf("1\n%d\n", v2[i]);
        return 0;
      }
    }
  }
  int flag = 0;
  if (sum >= 1 && v2.size() > 0) {
    for (int j = 0; j < v2.size(); j++) {
      if (sushu[1 + v2[j]] == -1) {
        flag = v2[j];
        break;
      }
    }
  }
  if (flag == 0) {
    printf("%d\n1", sum);
    for (int i = 1; i < sum; i++) printf(" 1");
    printf("\n");
  } else {
    printf("%d\n1", sum + 1);
    for (int i = 1; i < sum; i++) printf(" 1");
    printf(" %d\n", flag);
  }
  return 0;
}

```