#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=1e7+10;
int n;
int a[maxn],prime[maxn],sum;
int main(){
for (int i=2; i<=maxn; i++) {
if (!a[i]) prime[sum++]=i;
for (int j=0; j<sum; j++) {
if (i*prime[j]>maxn) break;
a[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
while (scanf("%d",&n)!=EOF) {
if (n==8) {
puts("2 2 2 2");
continue;
}
if (n==9) {
puts("2 2 2 3");
continue;
}
if (n==10) {
puts("2 2 3 3");
continue;
}
if (n==11) {
puts("2 3 3 3");
continue;
}
if (n==12) {
puts("3 3 3 3");
continue;
}
if (n<8) {
cout<<"Impossible."<<endl;
continue;
}
if (n%2==0) {
printf("2 2 ");
n-=4;
}
else {
printf("2 3 ");
n-=5;
}
for (int i=0; i<sum; i++) {
if (prime[i]*2>n) break;
if (a[n-prime[i]]!=1) {
printf("%d %d\n",prime[i],n-prime[i]);
break;
}
}
here: continue;
}
}
很经典的一道题,利用了欧拉筛的原理