#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool visit[1000005];
vector <ll> adj[1000005];
void dfs(ll x)
{
visit[x] = true;
//changed here
for(int i=0;i<adj[x].size();i++)
{
if(visit[adj[x][i]]==false)
dfs(adj[x][i]);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
ll n,m;
cin>>n>>m;
char ch;
ll k=0,ranjana=0;
char str[n][m];
ll count[n][m];
//vector <ll> adj[n*m+1];
for(ll i=0;i<n;i++)
{
for(ll j=0;j<m;j++)
{
cin>>ch;
str[i][j] = ch;
count[i][j] = k;
k++;
}
}
memset(visit,false,sizeof(visit));
ll val=0;
for(ll i=0;i<n;i++)
{
for(ll j=0;j<m;j++)
{
if(str[i][j]=='S' and i+1 < n)
val = count[i+1][j];
else if(str[i][j]=='N' and i-1 >=0)
val = count[i-1][j];
else if(str[i][j]=='E' and j+1 < m)
val = count[i][j+1];
else if(str[i][j]=='W' and j-1 >= 0)
val = count[i][j-1];
adj[count[i][j]].push_back(val);
// Changed here
adj[val].push_back(count[i][j]);
}
}
for(ll i=0;i<n*m ; i++)
{
if(visit[i]==false)
{
dfs(i);
ranjana++;
}
}
cout<<ranjana<<endl;
for(ll i=0;i<n*m;i++)
adj[i].clear();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwpib29sIHZpc2l0WzEwMDAwMDVdOwp2ZWN0b3IgPGxsPiBhZGpbMTAwMDAwNV07CnZvaWQgZGZzKGxsIHgpCnsKCXZpc2l0W3hdID0gdHJ1ZTsKCS8vY2hhbmdlZCBoZXJlCglmb3IoaW50IGk9MDtpPGFkalt4XS5zaXplKCk7aSsrKQogICAgewogICAgICAgIGlmKHZpc2l0W2Fkalt4XVtpXV09PWZhbHNlKQogICAgICAgICAgICBkZnMoYWRqW3hdW2ldKTsKICAgIH0KfQoKaW50IG1haW4oKQp7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKE5VTEwpOwoJbGwgbixtOwoJY2luPj5uPj5tOwoJY2hhciBjaDsKCWxsIGs9MCxyYW5qYW5hPTA7CgljaGFyIHN0cltuXVttXTsKCWxsIGNvdW50W25dW21dOwoJLy92ZWN0b3IgPGxsPiBhZGpbbiptKzFdOwoJZm9yKGxsIGk9MDtpPG47aSsrKQoJewoJCWZvcihsbCBqPTA7ajxtO2orKykKCQl7CgkJCWNpbj4+Y2g7CgkJCXN0cltpXVtqXSA9IGNoOwoJCQljb3VudFtpXVtqXSA9IGs7CgkJCWsrKzsKCQl9Cgl9CgltZW1zZXQodmlzaXQsZmFsc2Usc2l6ZW9mKHZpc2l0KSk7CglsbCB2YWw9MDsKCWZvcihsbCBpPTA7aTxuO2krKykKCXsKCQlmb3IobGwgaj0wO2o8bTtqKyspCgkJewoJCQlpZihzdHJbaV1bal09PSdTJyBhbmQgaSsxIDwgbikKCQkJCXZhbCA9IGNvdW50W2krMV1bal07CgkJCWVsc2UgaWYoc3RyW2ldW2pdPT0nTicgYW5kIGktMSA+PTApCgkJCQl2YWwgPSBjb3VudFtpLTFdW2pdOwoJCQllbHNlIGlmKHN0cltpXVtqXT09J0UnIGFuZCBqKzEgPCBtKQoJCQkJdmFsID0gY291bnRbaV1baisxXTsKCQkJZWxzZSBpZihzdHJbaV1bal09PSdXJyBhbmQgai0xID49IDApCgkJCQl2YWwgPSBjb3VudFtpXVtqLTFdOwoKCQkJYWRqW2NvdW50W2ldW2pdXS5wdXNoX2JhY2sodmFsKTsKCQkJLy8gQ2hhbmdlZCBoZXJlCgkJCWFkalt2YWxdLnB1c2hfYmFjayhjb3VudFtpXVtqXSk7CgkJfQoJfQoJZm9yKGxsIGk9MDtpPG4qbSA7IGkrKykKCXsKCQlpZih2aXNpdFtpXT09ZmFsc2UpCgkJewoJCQlkZnMoaSk7CgkJCXJhbmphbmErKzsKCQl9Cgl9Cgljb3V0PDxyYW5qYW5hPDxlbmRsOwoJZm9yKGxsIGk9MDtpPG4qbTtpKyspCgkJYWRqW2ldLmNsZWFyKCk7CgoJcmV0dXJuIDA7Cn0K