#include <iostream>
#include <vector>
using namespace std;
const unsigned int N = 100;
vector<unsigned int> set;
vector<unsigned int> prime_table;
void build_table();
void dfs(unsigned int sum, unsigned int index);
int main()
{
build_table();
dfs(0, 0);
return 0;
}
void dfs(unsigned int sum, unsigned int index){
for(unsigned int i = index; i < prime_table.size(); i++)
{
if(sum + prime_table[i] > N)
break;
else if(sum + prime_table[i] == N)
{
for(unsigned int j = 0; j < set.size(); j++)
cout << set[j] << ' ';
cout << prime_table[i] << endl;
break;
}
else if(sum + prime_table[i] < N)
{
set.push_back(prime_table[i]);
dfs(sum+prime_table[i], i+1);
set.pop_back();
}
}
}
void build_table()
{
prime_table.push_back(2);
prime_table.push_back(3);
for(unsigned int i = 4; i <= N; i++)
{
bool flag = true;
for(unsigned int j = 0; j < prime_table.size(); j++)
if(i % prime_table[j] == 0)
{
flag = false;
break;
}
if(flag)
prime_table.push_back(i);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IHVuc2lnbmVkIGludCBOID0gMTAwOwp2ZWN0b3I8dW5zaWduZWQgaW50PiBzZXQ7CnZlY3Rvcjx1bnNpZ25lZCBpbnQ+IHByaW1lX3RhYmxlOwoKdm9pZCBidWlsZF90YWJsZSgpOwp2b2lkIGRmcyh1bnNpZ25lZCBpbnQgc3VtLCB1bnNpZ25lZCBpbnQgaW5kZXgpOwoKaW50IG1haW4oKQp7CiAgICBidWlsZF90YWJsZSgpOwogICAgZGZzKDAsIDApOwoKICAgIHJldHVybiAwOwp9Cgp2b2lkIGRmcyh1bnNpZ25lZCBpbnQgc3VtLCB1bnNpZ25lZCBpbnQgaW5kZXgpewoKICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IGluZGV4OyBpIDwgcHJpbWVfdGFibGUuc2l6ZSgpOyBpKyspCiAgICB7CiAgICAgICAgaWYoc3VtICsgcHJpbWVfdGFibGVbaV0gPiBOKQogICAgICAgICAgICBicmVhazsKICAgICAgICBlbHNlIGlmKHN1bSArIHByaW1lX3RhYmxlW2ldID09IE4pCiAgICAgICAgewogICAgICAgICAgICBmb3IodW5zaWduZWQgaW50IGogPSAwOyBqIDwgc2V0LnNpemUoKTsgaisrKQogICAgICAgICAgICAgICAgY291dCA8PCBzZXRbal0gPDwgJyAnOwoKICAgICAgICAgICAgY291dCA8PCBwcmltZV90YWJsZVtpXSA8PCBlbmRsOwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoc3VtICsgcHJpbWVfdGFibGVbaV0gPCBOKQogICAgICAgIHsKICAgICAgICAgICAgc2V0LnB1c2hfYmFjayhwcmltZV90YWJsZVtpXSk7CiAgICAgICAgICAgIGRmcyhzdW0rcHJpbWVfdGFibGVbaV0sIGkrMSk7CiAgICAgICAgICAgIHNldC5wb3BfYmFjaygpOwogICAgICAgIH0KICAgIH0KfQoKCnZvaWQgYnVpbGRfdGFibGUoKQp7CiAgICBwcmltZV90YWJsZS5wdXNoX2JhY2soMik7CiAgICBwcmltZV90YWJsZS5wdXNoX2JhY2soMyk7CgogICAgZm9yKHVuc2lnbmVkIGludCBpID0gNDsgaSA8PSBOOyBpKyspCiAgICB7CiAgICAgICAgYm9vbCBmbGFnID0gdHJ1ZTsKICAgICAgICBmb3IodW5zaWduZWQgaW50IGogPSAwOyBqIDwgcHJpbWVfdGFibGUuc2l6ZSgpOyBqKyspCiAgICAgICAgICAgIGlmKGkgJSBwcmltZV90YWJsZVtqXSA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmbGFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICBpZihmbGFnKQogICAgICAgICAgICBwcmltZV90YWJsZS5wdXNoX2JhY2soaSk7CiAgICB9Cgp9Cg==