#include <bits/stdc++.h>
using namespace std;
bool is_prime(long long n) {
  if (n == 2) return true;
  if (n < 2 || n % 2 == 0) return false;
  for (long long i = 3; i * i <= n; i += 2)
    if (n % i == 0) return false;
  return true;
}
int pr[10000000], num_prim;
bool ch[10000000 + 1];
void sieve() {
  memset(ch, -1, sizeof ch);
  for (int i = 2; i * i <= 1000000000; ++i) {
    if (ch[i]) {
      for (int j = i + i; j <= 100; j += i) {
        ch[j] = 0;
      }
    }
  }
  for (int i = 2; i <= 100; ++i)
    if (ch[i]) pr[num_prim++] = i;
}
int main() {
  int n;
  cin >> n;
  if (is_prime(n)) {
    cout << 1 << endl << n << endl;
    return 0;
  }
  int n1 = n;
  vector<long long int> v;
  while (1) {
    n1--;
    if (is_prime(n1)) {
      v.push_back(n1);
      break;
    }
  }
  if (is_prime(n - n1)) {
    cout << 2 << endl << n1 << " " << n - n1;
    return 0;
  }
  if (n - n1 == 1) {
    v.clear();
    while (1) {
      n1--;
      if (is_prime(n1)) {
        v.push_back(n1);
        break;
      }
    }
    if (is_prime(n - n1)) {
      cout << 2 << endl << n1 << " " << n - n1;
      return 0;
    }
  }
  n -= n1;
  n1 = n;
  while (1) {
    n--;
    if (is_prime(n) && is_prime(n1 - n)) {
      v.push_back(n);
      break;
    }
  }
  cout << 3 << endl << v[0] << " " << v[1] << " " << n1 - n << endl;
}
