#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define ff first
#define ss second
int n,m;
const int N = 101;
char a[N][N];
int ans;
bool ok;
void dfs(int i, int j, int c){
if(i > n || i < 1 || j > m || j < 1 || a[i][j] == 'o' || a[i][j] == '.') return;
if(a[i][j] == 'x'){
ok = 1;
ans = c;
return;
}
if(a[i][j] == '>') dfs(i,j+1,c+1);
if(a[i][j] == '<') dfs(i,j-1,c+1);
if(a[i][j] == '^') dfs(i-1,j,c+1);
if(a[i][j] == 'v') dfs(i+1,j,c+1);
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m;
int oi = 0, oj = 0;
for(int i=1; i <= n; i ++){
for(int j=1; j <= m; j ++){
cin >> a[i][j];
if(a[i][j] == 'o') oi = i, oj = j;
}
}
int mn = INT_MAX;
map<char,int> mp;
dfs(oi+1, oj,1);
if(ok)mn = min(mn, ans), mp['S'] = ans;
ok = 0;
ans = 0;
dfs(oi-1, oj,1);
if(ok)mn = min(mn, ans), mp['N'] = ans;
ok = 0;
ans = 0;
dfs(oi, oj+1,1);
if(ok)mn = min(mn, ans), mp['E'] = ans;
ok = 0;
ans = 0;
dfs(oi, oj-1,1);
if(ok)mn = min(mn, ans), mp['W'] = ans;
ok = 0;
ans = 0;
bool f = 0;
for(auto i : mp){
if(i.ss == mn){
f = 1;
cout << ":)\n" << i.ff;
break;
}
}
if(!f) cout << ":(";
}