/*
TASK: flower
LANG: C++
*/
#include <stdio.h>
#include <string.h>

 typedef
  struct
   {
    int a[102];
   }ln;
 
 ln z[102][102];
 ln bin[102][102];
 int c[4];
 int n; 

 void show  (ln b)
  {
   int i,j;
   for (i=100;i>0;i--)
    if (b.a[i]!=0) break;
     else b.a[i]=9;
   b.a[i]--;
   for (i=0;i<=100;i++)
    if (b.a[i]!=0) break;
   if (i==101)
    {
     printf("0\n");
     return;
    }    
   for (j=i;j<=100;j++)
    printf("%d",b.a[j]);
   printf("\n");
  }

 ln operator+ (ln x,ln y)
  {
   ln c;
   int i;
   memset(c.a,0,sizeof(c.a));
   for (i=100;i>=1;i--)
    {
     c.a[i-1]=(c.a[i]+x.a[i]+y.a[i])/10;
     c.a[i]=(c.a[i]+x.a[i]+y.a[i])%10;
    }
   return c;
  }

 ln operator* (ln x,ln y)
  {
   ln c;
   int i,j;
   memset(c.a,0,sizeof(c.a));
   for (i=100;i>=1;i--)
    for (j=100;j>=1;j--)
     if (i+j>100)
       c.a[100-(200-i-j)]+=(x.a[i]*y.a[j]);
   for (i=100;i>=1;i--)
    {
     c.a[i-1]+=c.a[i]/10;
     c.a[i]%=10;
    }
   return c;
  }
  
 int main ()
  {
   char pom[4];
   int i,j;
   scanf("%d",&n);
   for (i=1;i<=n;i++)
    {
     scanf("%s",pom);
     if (pom[0]=='N')c[0]++;
     if (pom[0]=='S')c[1]++;
     if (pom[0]=='W')c[2]++;
     if (pom[0]=='E')c[3]++;
    }
   z[0][0].a[100]=bin[0][0].a[100]=1;
   for (i=1;i<=n;i++)
    for (j=0;j<=i;j++)
     {
      z[i][j]=z[i-1][j];
      bin[i][j]=bin[i-1][j];
      if (j!=0)
       {
        z[i][j]=(z[i][j]+z[i][j-1]);
        bin[i][j]=(bin[i][j]+bin[i-1][j-1]);
       }
     }
   i=c[0];j=c[2];
   show((z[i][i]*z[j][j])*bin[2*i+2*j][2*i]);
   return 0;
  }
