Var
   t: Int64;
   i,n: longint;
   f: array [0..7] of Int64;
   h,v: array [1..7,1..7] of boolean;

Procedure cuadro(i,j: longint);
          var k: longint;
          begin
          if (j > n) then
             t:= t + 1
          else
             for k:= 1 to n do
                 if (not v[i,k]) and (not h[j,k]) then
                    begin
                    v[i,k]:= true;
                    h[j,k]:= true;
                    if (i < n) then cuadro(i+1,j)
                               else cuadro(2,j+1);
                    v[i,k]:= false;
                    h[j,k]:= false;
                    end;
          end;

Begin
     readln(input, n);
     f[0]:= 1;
     for i:= 1 to n do
         f[i]:= i*f[i-1];
     for i:= 1 to n do
         begin
         v[1,i]:= true;
         v[i,i]:= true;
         h[1,i]:= true;
         h[i,i]:= true;
         end;
     t:= 0;
     cuadro(2,2);
     writeln(output, t, ' ', t*f[n]*f[n-1]);
End.
