#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
int a[40];
int book[40];
int n,T,sum,count;
void DFS(int k);
int main()
{
int i,j;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cin>>T;
sum=0;
count=0;
memset(book,0,sizeof(book));
DFS(n-1); //按题目要求的输出顺序,从后往前搜索
printf("%d\n",count);
return 0;
}
void DFS(int k)
{
int i,j,flag=0;
if(k<0)
{
sum=0;
for(i=0;i<n;i++)
{
if(book[i]==1)
{
flag=1;
sum+=a[i];
}
}
if(sum==T && flag) //flag是为了判断这n个数是不是全没被选中,全没被选中是不允许的。
{
count++;
for(i=0;i<n;i++)
{
if(book[i]==1)
printf("%d ",a[i]);
}
printf("\n");
}
return ;
}
book[k]=0;
DFS(k-1);
book[k]=1;
DFS(k-1);
}
/**************************************************************
Problem: 1850
User: admin
Language: C++
Result: Accepted
Time:1054 ms
Memory:2076 kb
****************************************************************/