#include <bits/stdc++.h>
using namespace std;
const long long inf = 0xFFFFFFFFFFFFFFFL;
clock_t time_p = clock();
void time() {
  time_p = clock() - time_p;
  cerr << "Time Taken : " << (float)(time_p) / CLOCKS_PER_SEC << "\n";
}
long long mul_mod(long long a, long long b, long long m) {
  long long y =
      (long long)((long double)a * (long double)b / m + (long double)1 / 2);
  y = y * m;
  long long x = a * b;
  long long r = x - y;
  if (r < 0) {
    r = r + m;
    y = y - 1;
  }
  return r;
}
long long pot(long long a, long long b, long long c) {
  if (b == 0) return 1;
  if (b == 1) return a % c;
  long long resp = pot(a, b >> 1, c);
  resp = mul_mod(resp, resp, c);
  if (b & 1) resp = mul_mod(resp, a, c);
  return resp;
}
bool isPrime(long long n) {
  long long d = n - 1;
  long long s = 0;
  if (n <= 3 || n == 5) return true;
  if (!(n & 1)) return false;
  while (!(d & 1)) {
    s++;
    d >>= 1;
  }
  for (long long i = 0; i < 32; i++) {
    long long a = rand();
    a <<= 32;
    a += rand();
    a %= (n - 3);
    a += 2;
    long long x = pot(a, d, n);
    if (x == 1 || x == n - 1) continue;
    for (long long j = 1; j <= s - 1; j++) {
      x = mul_mod(x, x, n);
      if (x == 1) return false;
      if (x == n - 1) break;
    }
    if (x != n - 1) return false;
  }
  return true;
}
pair<long long, long long> breaker(long long n) {
  if (isPrime(n)) return {n, 0};
  for (long long i = 2; i < n; i++) {
    if (isPrime(i) && isPrime(n - i)) return {i, n - i};
  }
}
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n;
  cin >> n;
  if (isPrime(n)) {
    cout << 1 << "\n" << n << "\n";
    return 0;
  }
  if (isPrime(n - 2)) {
    cout << 2 << "\n";
    cout << 2 << " " << n - 2 << "\n";
    return 0;
  }
  if (isPrime(n - 3)) {
    cout << 2 << "\n";
    cout << 3 << " " << n - 3 << "\n";
    return 0;
  }
  if (isPrime(n - 4)) {
    cout << 3 << "\n";
    cout << 2 << " " << 2 << " " << n - 4 << "\n";
    return 0;
  }
  long long part1 = 0, part2 = 0, part3 = 0;
  for (long long i = n - 5; i >= 0; i--) {
    if (isPrime(i)) {
      part1 = i;
      pair<long long, long long> p = breaker(n - i);
      part2 = p.first;
      part3 = p.second;
      break;
    }
  }
  long long ct = 0;
  vector<long long> list;
  if (part1 != 0) {
    ct++;
    list.push_back(part1);
  }
  if (part2 != 0) {
    ct++;
    list.push_back(part2);
  }
  if (part3 != 0) {
    ct++;
    list.push_back(part3);
  }
  cout << ct << "\n";
  for (long long i = 0; i < (long long)list.size(); i++) cout << list[i] << " ";
  cout << "\n";
  time();
  return 0;
}
