#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return (b) ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
long long modpow(long long n, long long k, long long mod) {
  long long ans = 1;
  while (k > 0) {
    if (k & 1) ans = (ans * n) % mod;
    k >>= 1;
    n = (n * n) % mod;
  }
  return ans % mod;
}
long long max(long long a, long long b) { return (a > b) ? a : b; }
long long min(long long a, long long b) { return (a < b) ? a : b; }
long long ab(long long a) { return (a > 0) ? a : -a; }
long long poww(long long n, long long k) {
  long long ans = 1;
  while (k > 0) {
    if (k & 1) ans *= n;
    k >>= 1;
    n *= n;
  }
  return ans;
}
double ab(double a) { return (a > 0.0) ? a : -a; }
inline int max(int a, int b) { return (a > b) ? a : b; }
inline int min(int a, int b) { return (a < b) ? a : b; }
bool prime(long long n) {
  long long i = 2;
  if (n < i) return 0;
  for (; i * i <= n; i++)
    if (n % i == 0) return 0;
  return 1;
}
long long first(long long n) {
  long long i;
  for (i = n / 2; i >= 2; i--) {
    if (prime(i) && prime(n - i)) {
      cout << i << " " << n - i << endl;
      return 0;
    }
  }
  return -1;
}
int main() {
  ios::sync_with_stdio(false);
  long long n;
  cin >> n;
  if (n == 3) cout << "1\n3\n";
  if (n == 5) cout << "1\n5\n";
  if (n >= 7) {
    cout << "3\n3 ";
    first(n - 3);
  }
  return 0;
}
