var m,n,m2,i,n2,k:integer;
a:array[1..10]of integer;
b:array[1..10]of boolean;
function pan:boolean;
var i:integer;
begin
pan:=false;
for i:=1 to n do
if not(b) then pan:=true;
end;
begin
readln(m,n);
for i:=1 to n do
begin
read(a);
b:=false;
end;
n2:=0;
k:=1;
while pan do
begin
while k=n do
begin
m2:=0;
for i:=1 to n do
if b then inc(m2,a);
if m2=m then
begin
for i:=1 to n do
if b then write(a,' ');
writeln;
inc(n2);
end;
if not(pan) then
begin
writeln(n2);
halt;
end;
while b[k]=true do
begin
b[k]:=not(b[k]);
k:=k-1;
end;
b[k]:=true;
end;
k:=k+1;b[k]:=false;
end;
end.