uses crt;
var f:text; n,k,d:longint;
b,c:array[1..100000]of longint;
function kt:boolean;
var i:longint;
begin
kt:=true;
for i:=2 to k do
if b[i]<b[i-1] then kt:=false;
end;
procedure print;
var i:longint;
begin
if kt then
begin
write(f,'{');
for i:=1 to k-1 do write(f,b[i],',');
write(f,b[k]);
inc(d);
writeln(f,'}');
end;
end;
function dequy(a:longint):longint;
var i:longint;
begin
for i:=1 to n Do
if c[i]=0 then
begin
c[i]:=1;
b[a]:=i;
if a=k+1 then print else dequy(a+1);
c[i]:=0;
end;
end;
begin
clrscr;
assign(f,'SILICON.INP');reset(f);
readln(f,n,k);
close(f);
assign(f,'SILICON.OUT');rewrite(f);
dequy(1);
writeln(f,d);
close(f);
readln
end.