#include <bits/stdc++.h>
using namespace std;
long long pri[] = {2, 7, 61};
long long gcd(long long a, long long b) {
  while (b) {
    long long c = a % b;
    a = b;
    b = c;
  }
  return a;
}
long long multi(long long a, long long b, long long n) {
  long long tmp = 0;
  while (b) {
    if (b & 1) {
      tmp += a;
      if (tmp >= n) tmp -= n;
    }
    a <<= 1;
    if (a >= n) a -= n;
    b >>= 1;
  }
  return tmp;
}
long long multimod(long long a, long long m, long long n) {
  long long tmp = 1;
  a %= n;
  while (m) {
    if (m & 1) tmp = multi(tmp, a, n);
    a = multi(a, a, n);
    m >>= 1;
  }
  return tmp;
}
bool Miller_Rabin(long long n) {
  if (n < 2) return false;
  if (n == 2) return true;
  if (!(n & 1)) return false;
  long long k = 0, i, j, m, a;
  m = n - 1;
  while (!(m & 1)) m >>= 1, k++;
  for (i = 0; i < 3; i++) {
    if (pri[i] >= n) return true;
    a = multimod(pri[i], m, n);
    if (a == 1) continue;
    for (j = 0; j < k; j++) {
      if (a == n - 1) break;
      a = multi(a, a, n);
    }
    if (j == k) return false;
  }
  return true;
}
int main() {
  int n;
  cin >> n;
  if (Miller_Rabin(n)) {
    cout << 1 << endl << n << endl;
    return 0;
  }
  for (int i = n; i > 1; i--) {
    if (Miller_Rabin(i)) {
      if (Miller_Rabin(n - i)) {
        cout << 2 << endl << i << ' ' << n - i << endl;
        return 0;
      } else {
        for (int j = n - i; j > 1; j--) {
          if (Miller_Rabin(j) && Miller_Rabin(n - i - j)) {
            cout << 3 << endl << i << ' ' << j << ' ' << n - i - j << endl;
            return 0;
          }
        }
      }
    }
  }
}
