#include <bits/stdc++.h>
using namespace std;
bool visited[1000];
int main() {
  vector<int> v;
  long long n;
  long long i, j, h = 0, k = 0, o = 0, z, x, p = 0, w;
  for (i = 2; i < 1000; i++)
    if (!visited[i])
      for (j = 2 * i; j < 1000; j += i) visited[j] = 1;
  for (i = 2; i < 1000; i++)
    if (visited[i] == 0) v.push_back(i);
  cin >> n;
  for (i = 1; i * i <= n; i++) {
    if (n % i == 0)
      k++;
    else
      continue;
    if (n / i == i)
      continue;
    else
      k++;
    if (k > 2) break;
  }
  if (k == 2) {
    printf("1\n%I64d", n);
    return 0;
  } else {
    for (i = 1; i * i <= n - 2; i++) {
      if ((n - 2) % i == 0)
        o++;
      else
        continue;
      if ((n - 2) / i == i)
        continue;
      else
        o++;
      if (o > 2) break;
    }
    if (o == 2) {
      printf("2\n2 %I64d", n - 2);
    } else {
      printf("3\n");
      n = n - 3;
      for (i = 1; i * i <= n / 2; i++) {
        if ((n / 2) % i == 0)
          h++;
        else
          continue;
        if ((n / 2) / i == i)
          continue;
        else
          h++;
        if (h > 2) break;
      }
      if (h == 2) {
        printf("3 %I64d %I64d", n / 2, n / 2);
      } else {
        for (i = 0; i < v.size(); i++)
          if (n > v[i]) {
            x = n - v[i];
            o = 0;
            for (j = 1; j * j <= x; j++) {
              if (x % j == 0)
                o++;
              else
                continue;
              if (x / j == j)
                continue;
              else
                o++;
              if (o > 2) break;
            }
            if (o == 2) {
              printf("3 %d %I64d", v[i], x);
              return 0;
            }
          }
      }
    }
  }
  return 0;
}
