#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<utility>
#include<algorithm>
#include<iomanip>
#include<functional>
#include<limits>
#include<memory>
#include<cstdlib>
#include<cassert>
#include<cctype>
#include<cfloat>
#include<stack>
#include<queue>
#include<deque>
#include<iterator>
#include<list>
#include<vector>
#include<map>
#include<set>
#include<numeric>
#include<ctime>
#include<sstream>
using namespace std;
// ***COMMONLY USED MACROS***
#define MOD 1000000007
#define pb push_back
#define pob pop_back
#define pf push_front
#define pof pop_front
#define mp make_pair
#define minr min_element
#define maxr max_element
#define mh make_heap
#define ph push_heap
#define poh pop_heap
#define Sd(n) scanf("%d",&n)
#define Pd(n) printf("%d\n",n)
#define Sld(n) scanf("%lld",&n)
#define Pld printf("%lld\n",n)
#define Ss(s) scanf("%s\n",s)
#define Ps(s) printf("%s\n",s)
#define forn(i,n) for(int i=0;i<int(n);i++)
#define ford(i,n) for(int i=int(n);i>=0;i--)
#define all(a) a.begin(),a.end()
#define set(a,x) memset(a,x,sizeof(a))
#define mod 10000007
// ***FEW TYPEDEFINES**
typedef unsigned long long int uint64;
typedef long long int int64;
typedef pair<int64,int64> pii;
const long double pi = 3.1415926535897932384626433832795;
const long double eps = 1e-9;
string s[1001];
int vis[1001][1001];
int dfs(int i,int j){
vis[i][j]=1;
switch(s[i][j]){
case 'N':
if(vis[i-1][j]==0)
dfs(i-1,j);
break;
case 'S':
if(vis[i+1][j]==0)
dfs(i+1,j);
break;
case 'W':
if(vis[i][j-1]==0)
dfs(i,j-1);
break;
case 'E':
if(vis[i][j+1]==0)
dfs(i,j+1);
break;
}
}
int main(){
int n,m,i,j,ans=0;
cin>>n>>m;
for(i=0;i<n;i++)
cin>>s[i];
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(vis[i][j]==0){
dfs(i,j);
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y3N0cmluZz4KI2luY2x1ZGU8Y21hdGg+CiNpbmNsdWRlPHV0aWxpdHk+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8aW9tYW5pcD4KI2luY2x1ZGU8ZnVuY3Rpb25hbD4KI2luY2x1ZGU8bGltaXRzPgojaW5jbHVkZTxtZW1vcnk+CiNpbmNsdWRlPGNzdGRsaWI+CiNpbmNsdWRlPGNhc3NlcnQ+CiNpbmNsdWRlPGNjdHlwZT4KI2luY2x1ZGU8Y2Zsb2F0PgojaW5jbHVkZTxzdGFjaz4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPGRlcXVlPgojaW5jbHVkZTxpdGVyYXRvcj4KI2luY2x1ZGU8bGlzdD4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPHNldD4KI2luY2x1ZGU8bnVtZXJpYz4KI2luY2x1ZGU8Y3RpbWU+CiNpbmNsdWRlPHNzdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gKioqQ09NTU9OTFkgVVNFRCBNQUNST1MqKioKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHBvYiBwb3BfYmFjawojZGVmaW5lIHBmIHB1c2hfZnJvbnQKI2RlZmluZSBwb2YgcG9wX2Zyb250CiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgbWluciBtaW5fZWxlbWVudAojZGVmaW5lIG1heHIgbWF4X2VsZW1lbnQKI2RlZmluZSBtaCBtYWtlX2hlYXAKI2RlZmluZSBwaCBwdXNoX2hlYXAKI2RlZmluZSBwb2ggcG9wX2hlYXAKI2RlZmluZSBTZChuKSBzY2FuZigiJWQiLCZuKQojZGVmaW5lIFBkKG4pIHByaW50ZigiJWRcbiIsbikKI2RlZmluZSBTbGQobikgc2NhbmYoIiVsbGQiLCZuKQojZGVmaW5lIFBsZCBwcmludGYoIiVsbGRcbiIsbikKI2RlZmluZSBTcyhzKSBzY2FuZigiJXNcbiIscykKI2RlZmluZSBQcyhzKSBwcmludGYoIiVzXG4iLHMpCiNkZWZpbmUgZm9ybihpLG4pIGZvcihpbnQgaT0wO2k8aW50KG4pO2krKykKI2RlZmluZSBmb3JkKGksbikgZm9yKGludCBpPWludChuKTtpPj0wO2ktLSkKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLGEuZW5kKCkKI2RlZmluZSBzZXQoYSx4KSBtZW1zZXQoYSx4LHNpemVvZihhKSkKI2RlZmluZSBtb2QgMTAwMDAwMDcKLy8gICoqKkZFVyBUWVBFREVGSU5FUyoqCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50NjQ7CnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnQ2NDsKdHlwZWRlZiBwYWlyPGludDY0LGludDY0PiBwaWk7Cgpjb25zdCBsb25nIGRvdWJsZSBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTsKY29uc3QgbG9uZyBkb3VibGUgZXBzID0gMWUtOTsKc3RyaW5nIHNbMTAwMV07CmludCB2aXNbMTAwMV1bMTAwMV07CmludCBkZnMoaW50IGksaW50IGopewoJdmlzW2ldW2pdPTE7Cglzd2l0Y2goc1tpXVtqXSl7CgkJY2FzZSAnTic6CgkJaWYodmlzW2ktMV1bal09PTApCgkJZGZzKGktMSxqKTsKCQlicmVhazsKCQljYXNlICdTJzoKCQlpZih2aXNbaSsxXVtqXT09MCkKCQlkZnMoaSsxLGopOwoJCWJyZWFrOwoJCWNhc2UgJ1cnOgoJCWlmKHZpc1tpXVtqLTFdPT0wKQoJCWRmcyhpLGotMSk7CgkJYnJlYWs7CgkJY2FzZSAnRSc6CgkJaWYodmlzW2ldW2orMV09PTApCgkJZGZzKGksaisxKTsKCQlicmVhazsKCX0JCn0KaW50IG1haW4oKXsKCWludCBuLG0saSxqLGFucz0wOwoJY2luPj5uPj5tOwoJZm9yKGk9MDtpPG47aSsrKQoJY2luPj5zW2ldOwoJZm9yKGk9MDtpPG47aSsrKXsKCQlmb3Ioaj0wO2o8bTtqKyspewoJCQlpZih2aXNbaV1bal09PTApewoJCQlkZnMoaSxqKTsKCQkJYW5zKys7CgkJfQoJfQp9CmNvdXQ8PGFuczw8ZW5kbDsKcmV0dXJuIDA7Cn0K