/*
TASK:flower
LANG:C++
*/

#include<stdio.h>
#define LIM 100
#define max(a,b) (a>b?a:b)
//FILE *f=fopen("flower.out","wt");
int x,y,z;
int katalan[2][110][LIM],n,N,S,W,E,paskal[2][110][1000],katalan1[100],katalan2[100];
int otgovor1[200],otgovor2[300];
char a;


/*
void dfs(int level,int sum)
{
if(level==x)
{
if(sum==0)
otg++;
return;
}

if(sum>0)
dfs(level+1,sum-1);

dfs(level+1,sum+1);
return;
}
*/



void input()
{
scanf("%d",&n);
for(x=0;x<n;x++)
{
scanf("%c",&a);
scanf("%c",&a);
if(a=='N')N++;
if(a=='S')S++;
if(a=='W')W++;
if(a=='E')E++;
if(N<S||W<E)
            {
            printf("Greshni Vhodni danni\n");
            return;
            }
}
if(N!=S||W!=E)
            {
            printf("Greshni Vhodni danni\n");
            return;
            }
return;
}

int main()
{
input();
int lim;
lim=max(N,W);
//otgovor=combinacii (C/N)*nachini za C pozicii*nachini za N-C pozicii

//nachini na 2*K mesta da se razpolojat K severni i K iujni
//vse edno skobi da se postavqt
//chisla na katalan?
paskal[0][0][0]=1;
for(x=1;x<=n+1;x++)
{
for(y=0;y<=x;y++)
{
for(z=0;z<LIM;z++)
                  paskal[(x)%2][y][z]=paskal[(x+1)%2][y][z]+paskal[(x+1)%2][y-1][z];
for(z=0;z<LIM;z++)
                  {
                  paskal[x%2][y][z+1]+=paskal[x%2][y][z]/10;
                  paskal[x%2][y][z]%=10;
                  }
}
}



katalan[0][0][0]=1;
for(x=0;x<=n;x++)
{
if(x==2*lim+1)
for(z=0;z<LIM;z++)
katalan1[z]=katalan[(x+1)%2][0][z];

if(x==n-2*lim+1)
for(z=0;z<LIM;z++)
katalan2[z]=katalan[(x+1)%2][0][z];

for(y=0;y<=x;y++)
for(z=0;z<LIM;z++)
katalan[(x+1)%2][y][z]=0;

for(z=0;z<LIM;z++)
katalan[(x+1)%2][1][z]+=katalan[x%2][0][z];
for(z=0;z<LIM;z++)
{
katalan[(x+1)%2][1][z+1]+=katalan[(x+1)%2][1][z]/10;
katalan[(x+1)%2][1][z]%=10;
}
for(y=1;y<=x;y++)
{
for(z=0;z<LIM;z++)
{
katalan[(x+1)%2][y+1][z]+=katalan[x%2][y][z];
katalan[(x+1)%2][y-1][z]+=katalan[x%2][y][z];
}
for(z=0;z<LIM;z++)
{
katalan[(x+1)%2][y-1][z+1]+=katalan[(x+1)%2][y-1][z]/10;
katalan[(x+1)%2][y-1][z]%=10;
katalan[(x+1)%2][y+1][z+1]+=katalan[(x+1)%2][y+1][z]/10;
katalan[(x+1)%2][y+1][z]%=10;
}
}
}

//umnojenie na dylgi chisla... sys syshtiq uspeh mojeshe da ima zadacha
//"Imash 30 sekundi da si izbodesh ochite s tazi vilica"

for(y=0;y<100;y++)
for(z=0;z<100;z++)
otgovor1[y+z]+=katalan1[y]*paskal[n%2][2*lim][z];

for(z=0;z<200;z++)
{
otgovor1[z+1]+=otgovor1[z]/10;
otgovor1[z]%=10;
}

for(y=0;y<100;y++)
for(z=0;z<100;z++)
otgovor2[y+z]+=katalan2[y]*otgovor1[z];

for(z=0;z<300;z++)
{
otgovor2[z+1]+=otgovor2[z]/10;
otgovor2[z]%=10;
}

z=0;
while(otgovor2[z]==0)z++;
otgovor2[z]--;
z--;
while(z>=0)
{
otgovor2[z]=9;
z--;
}



z=299;
while(otgovor2[z]==0)z--;
for(z;z>=0;z--)
printf("%d",otgovor2[z]);
printf("\n");
return 0;
}

/*
for(x=2;x<=100;x+=2)
{
fprintf(f,"%d - ",x);
printf("%d - ",x);
z=100;
while(katalan[x][0][z]==0)z--;
for(z;z>=0;z--)
{
fprintf(f,"%d",katalan[x][0][z]);
printf("%d",katalan[x][0][z]);
}
fprintf(f,"\n");
printf("\n");
}
*/

