#include <bits/stdc++.h>
using namespace std;
const int MAXX = 300;
int n, N;
bool np[MAXX];
vector<int> prime;
void sieve() {
  np[0] = np[1] = 1;
  for (int i = 2; i < MAXX; ++i) {
    if (np[i]) continue;
    prime.push_back(i);
    for (int j = 2 * i; j < MAXX; j += i) np[j] = 1;
  }
}
bool isPrime(int a) {
  for (int i = 2; i * i <= a; ++i) {
    if (a % i == 0) return false;
  }
  return true;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  sieve();
  cin >> n;
  N = n;
  while (!isPrime(n)) n--;
  if (N == n)
    cout << "1\n" << n;
  else {
    if (isPrime(N - n)) {
      cout << "2\n";
      cout << n << ' ' << N - n;
      return 0;
    }
    for (int i : prime)
      if (isPrime(N - n - i)) {
        cout << "3\n";
        cout << i << ' ' << n << ' ' << N - n - i;
        return 0;
      }
  }
  return 0;
}
