#include <bits/stdc++.h>
using namespace std;
long long n, ocnt, pcnt, a[10000000 + 5], pri[10000000 + 5];
bool flag, isnp[10000000 + 5];
vector<long long> v;
inline long long read() {
  long long f = 1, q = 0;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = 0;
    ch = getchar();
  }
  while (isdigit(ch)) q = (q << 3) + (q << 1) + (ch ^ 48), ch = getchar();
  return f ? q : -q;
}
inline void print(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) print(x / 10);
  putchar(x % 10 + 48);
}
inline void prime(long long n) {
  isnp[0] = isnp[1] = 1;
  for (register long long i = 2; i <= n; ++i) {
    if (!isnp[i]) pri[++pcnt] = i;
    for (register long long j = 1; j <= pcnt; ++j) {
      if (i * pri[j] >= n) break;
      isnp[i * pri[j]] = 1;
      if (!(i % pri[j])) break;
    }
  }
}
signed main() {
  prime(10000000), n = read();
  for (register long long i = 1; i <= n; ++i) a[i] = read();
  sort(a + 1, a + n + 1);
  for (register long long i = 1; i <= n; ++i) {
    if (!(a[i] ^ 1))
      v.push_back(a[i]);
    else if ((!flag) && (!isnp[a[i] + 1]))
      flag = true, v.push_back(a[i]);
  }
  if (v.empty() || (!(v.size() ^ 1))) {
    for (register long long i = 1; i <= n; ++i)
      for (register long long j = i + 1; j <= n; ++j)
        if (!isnp[a[i] + a[j]]) {
          putchar('2'), putchar('\n'), print(a[i]), putchar(' '), print(a[j]);
          return 0;
        }
    putchar('1'), putchar('\n'), print(a[1]);
  } else {
    print(v.size()), putchar('\n');
    for (vector<long long>::iterator it = v.begin(); it != v.end(); ++it)
      print(*it), putchar(' ');
  }
  return 0;
}

### Prompt

Create a solution in cpp for 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;
long long n, ocnt, pcnt, a[10000000 + 5], pri[10000000 + 5];
bool flag, isnp[10000000 + 5];
vector<long long> v;
inline long long read() {
  long long f = 1, q = 0;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = 0;
    ch = getchar();
  }
  while (isdigit(ch)) q = (q << 3) + (q << 1) + (ch ^ 48), ch = getchar();
  return f ? q : -q;
}
inline void print(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) print(x / 10);
  putchar(x % 10 + 48);
}
inline void prime(long long n) {
  isnp[0] = isnp[1] = 1;
  for (register long long i = 2; i <= n; ++i) {
    if (!isnp[i]) pri[++pcnt] = i;
    for (register long long j = 1; j <= pcnt; ++j) {
      if (i * pri[j] >= n) break;
      isnp[i * pri[j]] = 1;
      if (!(i % pri[j])) break;
    }
  }
}
signed main() {
  prime(10000000), n = read();
  for (register long long i = 1; i <= n; ++i) a[i] = read();
  sort(a + 1, a + n + 1);
  for (register long long i = 1; i <= n; ++i) {
    if (!(a[i] ^ 1))
      v.push_back(a[i]);
    else if ((!flag) && (!isnp[a[i] + 1]))
      flag = true, v.push_back(a[i]);
  }
  if (v.empty() || (!(v.size() ^ 1))) {
    for (register long long i = 1; i <= n; ++i)
      for (register long long j = i + 1; j <= n; ++j)
        if (!isnp[a[i] + a[j]]) {
          putchar('2'), putchar('\n'), print(a[i]), putchar(' '), print(a[j]);
          return 0;
        }
    putchar('1'), putchar('\n'), print(a[1]);
  } else {
    print(v.size()), putchar('\n');
    for (vector<long long>::iterator it = v.begin(); it != v.end(); ++it)
      print(*it), putchar(' ');
  }
  return 0;
}

```