// Author: Manfred Scheucher
// Date  : 06.06.2015

#include <stdio.h>
#include <stdlib.h>

#define MAXN 20

int X[MAXN];
int subs[MAXN];
int tails[MAXN];

int n;

long ct=0;
int c1 = 0;
int l1 = 0;

int recliscount(int len,int k)
{
  int l;
  if(len >= l1)
  {
    if(len>l1) 
    {
      l1 = len; 
      c1 = 0;
    }
    c1++;
  }
  for(l=k+1;l<n;l++)
  {
    if(X[k]<X[l]) 
    {
      recliscount(len+1,l);
    }
  }
}

int perm(int k)
{
  int j,x;
  if(k==n)
  {
    l1=0;
    for(j=0;j<=n-l1;j++) recliscount(1,j);
    ct+=c1;
  }
  else
  {
    for(x=0;x<n;x++)
    {
      for(j=0;j<k;j++)
      {
	if(x==X[j])
	{
	  j=-1;
	  break;
	}
      }
      if(j>=0)
      {
	X[k]=x;
	perm(k+1);
      }
    }
  }
}

int main(int argc,char** argv)
{
  n = atoi(argv[1]);
  perm(0);
  printf("%d %ld\n",n,ct);
}