#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);
    }

}
