#include <bits/stdc++.h>
using namespace std;
pair<int, int> need[1000];
bool esPrimo(int n) {
  if (n < 2) return false;
  for (int i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return true;
}
void calcNeed() {
  fill(need, need + 1000, make_pair(-1, -1));
  for (int meta = 0; meta < 1000; meta++)
    for (int A = 2; A <= meta; A++) {
      int B = meta - A;
      if (esPrimo(A) && (esPrimo(B) || B == 0)) need[meta] = {A, B};
    }
}
int main() {
  int n;
  cin >> n;
  calcNeed();
  if (esPrimo(n))
    cout << 1 << endl << n << endl;
  else {
    for (int r = 1; r < n; r++) {
      int a = n - r, b, c;
      if (esPrimo(a)) {
        tie(b, c) = need[r];
        if (b != -1) {
          if (c != 0)
            cout << 3 << endl << a << ' ' << b << ' ' << c << endl;
          else
            cout << 2 << endl << a << ' ' << b << endl;
          break;
        }
      }
    }
  }
  return 0;
}
