func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( O3 )   using namespace std;   template <class c>   struct rge {     c b, e;   };   template <class c>   rge<c> range(c i, c j) {     return rge<c>{i, j};   }   template <class c>   auto dud(c* x) -> decltype(cerr << *x, 0);   template <class c>   char dud(...);   struct debug {     template <class c>     debug& operator<<(const c&) {       return *this;     }   };   const long long MOD = 1e9 + 7;   const long long N = 1e6 + 10;   const long long INF = 1e18 + 10;   bool isPrime(long long x) {     if (x <= 1) return false;     for (long long i = 2; i * i <= x; i++) {       if (x % i == 0) return false;     }     return true;   }   vector<bool> prime(N, true);   vector<long long> primes;   void seive() {     prime[0] = prime[1] = false;     for (long long i = 2; i * i <= N; i++) {       if (prime[i]) {         for (long long j = i + i; j < N; j += i) prime[j] = false;       }     }     for (long long i = 0; i < N; i++) {       if (prime[i]) {         primes.emplace_back(i);       }     }   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     seive();     long long n;     cin >> n;     if (isPrime(n)) {       cout << 1 << endl;       cout << n << endl;       return 0;     }     long long cur = n;     while (cur--) {       if (isPrime(cur)) {         debug() <<   [                  <<  cur                      :                   << (cur) <<  ]  ;         if (cur + 2 == n) {           cout << 2 << endl;           cout << 2 <<     << cur << endl;           return 0;         }         int target = n - cur;         debug() <<   [                  <<  target                      :                   << (target) <<  ]  ;         int L = 0, R = (int)primes.size() - 1;         while (L <= R) {           if (primes[L] + primes[R] == target) {             cout << 3 << endl;             cout << primes[L] <<     << primes[R] <<     << cur << endl;             return 0;           } else if (primes[L] + primes[R] > target)             R--;           else {             debug() <<   [                      <<  L                          :                       << (L)                     <<  ]                            [                      <<  R                          :                       << (R) <<  ]  ;             debug() <<   [                      <<  primes[L]                          :                       << (primes[L])                     <<  ]                            [                      <<  primes[R]                          :                       << (primes[R]) <<  ]  ;             L++;           }         }       }     }     return 0;   }   