#include <bits/stdc++.h>
using namespace std;
const long long OO = 1e9;
int n;
vector<int> prime;
int vis[1001];
void siv() {
  for (int i = 2; i * i <= 1000; i++)
    for (int j = i + i; j <= 1000; j += i) vis[j] = 1;
  for (int i = 2; i <= 1000; i++)
    if (!vis[i]) prime.push_back(i);
}
int isP(int x) {
  int f = 1;
  while (1) {
    f = 1;
    for (int i = 2; i * i <= x; i++)
      if (x % i == 0) {
        f = 0;
        break;
      }
    if (f && (n - x) != 1) return x;
    x--;
  }
}
int main() {
  siv();
  cin >> n;
  vector<int> ans;
  int z = isP(n);
  ans.push_back(z);
  n -= z;
  if (n) {
    if (binary_search(((prime).begin()), ((prime).end()), n))
      ans.push_back(n), n = 0;
    else {
      for (int i = 0; i < prime.size(); i++)
        if (binary_search(((prime).begin()), ((prime).end()), n - prime[i])) {
          ans.push_back(prime[i]);
          ans.push_back(n - prime[i]);
          break;
        }
    }
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
}
