rt
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,len,t1,t2,t3,t4;
struct xy
{
int x,y;
bool vis;
}car[4000100];
vector<int> graph[4000100];
map<char,xy> dit;
char a[2100][2100];
int b[2100][2100],rudu[4000100];
queue<int> q;
void dfs(int k)
{
car[k].vis=1;
int lujin=0;
xy te;
for(register int i=1;i<=max(n,m);++i)
{
te.x=dit[a[car[k].x][car[k].y]].x*i+car[k].x;
te.y=dit[a[car[k].x][car[k].y]].y*i+car[k].y;
if(te.x>=n||te.y>=m||te.x<0||te.y<0)break;
if(b[te.x][te.y]&&!car[b[te.x][te.y]].vis)
{
graph[b[te.x][te.y]].push_back(k);
rudu[k]++;
lujin++;
dfs(b[te.x][te.y]);
if(a[car[b[te.x][te.y]].x][car[b[te.x][te.y]].y]==a[car[k].x][car[k].y])
break;
}
}
if(!lujin)
{
graph[0].push_back(k);
rudu[k]++;
}
}
signed main()
{
dit['N'].x=-1;dit['S'].x=1;
dit['W'].y=-1;dit['E'].y=1;
scanf("%lld%lld",&n,&m);
for(register int i=0;i<n;++i)
{
scanf("%s",&a[i]);
for(register int j=0;j<m;++j)
{
if(a[i][j]!='.')
{
car[++len].x=i;
car[len].y=j;
b[i][j]=len;
}
}
}
for(register int i=1;i<=len;++i)
{
if(!car[i].vis)dfs(i);
}
q.push(0);
while(!q.empty())
{
if(q.front()!=0)
{
printf("(%lld,%lld)\n",car[q.front()].x,car[q.front()].y);
}
for(auto i:graph[q.front()])
{
rudu[i]--;
if(rudu[i]==0)q.push(i);
}
q.pop();
}
return 0;
}