#include<cstdio>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<cstring>
#include<iostream>
using namespace std;
typedef pair<int,int> P;
typedef pair<int,bool> B;
typedef pair<P,B> PP;
int W,H,N;
char fie[33][33];
int mie[33][33];
int ine[33][33];
vector<PP> q;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
void prfie(){
  for(int i=0;i<(int)q.size();i++){
    cout << q[i].first.first << " "<<q[i].first.second<<" : "<<q[i].second.first<<endl; 
  }
  for(int i=0;i<H;i++){
    for(int j=0;j<W;j++)
      cout << mie[j][i] << " ";
    cout << endl;
  }
  cout << endl;
  getchar();
}
int solve(){
  int turn=0;
  while(turn<=180 && N>0){
    ++turn;
    //    prfie();
    memset(ine,-1,sizeof(ine));
    for(int i=0;i<(int)q.size();i++){
      if(q[i].second.second) continue;
      for(int j=0;j<4;j++){
	PP p = q[i];
	int nx=(p.first.first)+dx[(p.second.first+j)%4];
	int ny=-p.first.second+dy[(p.second.first+j)%4];
	if(fie[nx][ny]!='#' && mie[nx][ny]==0){
	  q[i].second.first=(p.second.first+j+3)%4;
	  mie[p.first.first][-p.first.second]=q[i].second.first+1;
	  int nw=q[i].second.first;
	  if(nw==2) ine[nx][ny]=nw;
	  else if(ine[nx][ny]==2){}
	  else if(nw==3) ine[nx][ny]=nw;
	  else if(ine[nx][ny]==3){}
	  else if(nw==0) ine[nx][ny]=nw;
	  else if(ine[nx][ny]==0){}
	  else ine[nx][ny]=nw;
	  //	  cout << q[i].first.first << " "<<q[i].first.second<<" : "<<q[i].second.first<<endl;   
	  break;
	}
      }
    }
    sort(q.rbegin(),q.rend());
    for(int i=0;i<(int)q.size();i++){
      if(q[i].second.second) continue;
      PP p = q[i];
      int nx=(p.first.first)+dx[(p.second.first+1)%4];
      int ny=-p.first.second+dy[(p.second.first+1)%4];
      if(!mie[nx][ny] && ine[nx][ny]==p.second.first){
	mie[p.first.first][-p.first.second]=0;
	if(fie[nx][ny]=='X'){
	  --N;
	  q[i].second.second=true;
	  continue;
	}
	mie[nx][ny]=p.second.first+1;
	q[i]=PP(P(nx,-ny),B(p.second.first,false));
      }
    }
    
  }
  q.clear();
  return turn;
}
main(){
  while(1){
    cin >> W >> H;
    if(!W && !H) break;
    N=0;
    memset(mie,0,sizeof(mie));
    for(int i=0;i<H;i++){
      for(int j=0;j<W;j++){
	cin >>fie[j][i];
	if(fie[j][i]=='#')
	  mie[j][i]=9;
	if(fie[j][i]=='E'){
	  q.push_back(PP(P(j,-i),B(0,false)));
	  mie[j][i]=1;
	}else if(fie[j][i]=='N'){
	  q.push_back(PP(P(j,-i),B(1,false)));
	  mie[j][i]=2;
	}else if(fie[j][i]=='W'){
	  q.push_back(PP(P(j,-i),B(2,false)));
	  mie[j][i]=3;
	}else if(fie[j][i]=='S'){
	  q.push_back(PP(P(j,-i),B(3,false)));
	  mie[j][i]=4;
	}
      }
    }
    N=(int)q.size();
    int res=solve();
    if(res>180) cout <<"NA"<<endl;
    else cout << res << endl;
  }
}