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

#include <cstdio>
#include <map>

using namespace std;

#define MAX 55
#define MAX_D 8
#define BASE 1000000000

typedef struct { int d[MAX_D]; } big; 

struct state
{
  int A[4];
  
  state () {}
  state (int a, int b, int p, int q) {
    A[0] = a; A[1] = b; A[2] = p; A[3] = q;
  }
  
  bool operator < (const state &s) const
  {
    int i;
    
    for(i = 0; i < 4; i++) 
      if(A[i] != s.A[i]) return A[i] < s.A[i];
      
    return false;
  }
}; 

int n;
state start;
map <state, big> M;

int input(void);
void solve(void);
big DP(state s);
void init_big(big *a, int num);
void add_big(big *a, big *b);
void print_big(big *a);
void remove_one(big *a);

int main(void)
{   
  input(); 
  solve();
    
  return 0;
}

int input(void)
{
  char str[15];
  int i;
  
  if(scanf("%d", &n) != 1) return 0;
  
  for(i = 0; i < 4; i++) start.A[i] = 0;
  
  /*for(i = 0; i < 4; i++) scanf("%d", &start.A[i]);*/
  
  for(i = 0; i < n; i++) {
    scanf(" %s", str);
    if(str[0] == 'N') start.A[0]++;
    if(str[0] == 'S') start.A[1]++;
    if(str[0] == 'W') start.A[2]++;
    if(str[0] == 'E') start.A[3]++;
  }
  
  return 1;
}

void solve(void)
{
  big a;
  
  M.clear();
  init_big(&a, 1);
  M.insert(make_pair(state(0, 0, 0, 0), a));
  a = DP(start);
  remove_one(&a);
  print_big(&a);
}

big DP(state s)
{
  big a, b;
  int i;
  
  if(s.A[0] < s.A[1] || s.A[2] < s.A[3]) {
    init_big(&a, 0); return a;
  }
  
  if(M.find(s) != M.end()) return M[s];
  
  init_big(&a, 0);
  for(i = 0; i < 4; i++) 
    if(s.A[i] > 0) {
      s.A[i]--;
      b = DP(s);
      add_big(&a, &b);
      s.A[i]++;
    }
  return M[s] = a;
}       

void init_big(big *a, int num)
{
  int i;
  
  for(i = 0; i < MAX_D; i++) a->d[i] = 0;
  
  i = 0;
  while(num) { a->d[i++] = num % BASE; num /= BASE; }
}

void add_big(big *a, big *b)
{
  int r = 0;
  int i;
  
  for(i = 0; i < MAX_D; i++) {
    a->d[i] = a->d[i] + b->d[i] + r;
    r = a->d[i] / BASE; a->d[i] %= BASE;
  }
}

void print_big(big *a)
{
  int i;
  
  for(i = MAX_D - 1; i > 0; i--) if(a->d[i]) break;
  printf("%d", a->d[i]);
  for(i--; i >= 0; i--) printf("%.9d", a->d[i]);
  printf("\n");
} 

void remove_one(big *a)
{
  int i;
  
  for(i = 0; i < MAX_D; i++)
    if(a->d[i] > 0) { a->d[i]--; break; }
    else a->d[i] = 999999999;
    
} 

