const maxn=10000;
      readfile='irrelevant.in';
      writefile='irrelevant.out';

Var n,m,kol:longint;
    a:array[1..maxn,1..maxn] of longint;
    b:array[1..maxn] of longint;
{-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}
Procedure Rfile;
Var i1,j1:longint;
begin
     assign(input,readfile);
     reset(input);
     read(n,m);
     close(input);
end;
{-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}
Function Recurs(k,nn:longint):longint;
var i1,j1,z:longint;
label xx;
begin
     if k=0 then
     begin
          z:=1;
          goto xx;
     end;
     if k=nn then
     begin
          z:=1;
          goto xx;
     end;
     if (k<=maxn) and (nn<=maxn) then
        if a[k,nn]<>0 then
        begin
             z:=a[k,nn];
             goto xx;
        end;
     z:=recurs(k-1,nn-1) mod m;
     z:=(z+recurs(k,nn-1))mod m;
     if (k<=maxn) and (nn<=maxn) then
        a[k,nn]:=z;
    xx:recurs:=z;
end;
{-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}
Procedure Main;
var i1,j1,zz:longint;
begin
     a[1,1]:=1;
     for i1:=1 to n-1 do
     begin
          zz:=recurs(i1,n-1);
          if zz mod m=0 then
          begin
               inc(kol);
               b[kol]:=i1+1;
          end;
     end;
end;
{-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}
Procedure Wfile;
var i1,j1:integer;
begin
     assign(output,writefile);
     rewrite(output);
     writeln(kol);
     for i1:=1 to kol do
         write(b[i1],' ');
     close(output);
end;
{-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}
begin
     Rfile;
     Main;
     Wfile;
end.