#include<bits/stdc++.h>
using namespace std;
char str[1010][1010];
int mark[1010][1010];
void bfs(int a,int b, int n, int m)
{
queue<pair<int,int> > q;
q.push(make_pair(a,b));
while(!q.empty())
{
pair<int,int> pp = q.front();
q.pop();
if(mark[pp.first][pp.second])
continue;
mark[pp.first][pp.second] = 1;
if(str[pp.first][pp.second] == 'S')
{
if(mark[pp.first+1][pp.second]== 0)
q.push(make_pair(pp.first+1,pp.second));
}
if(str[pp.first][pp.second] == 'N')
{
if(mark[pp.first-1][pp.second]== 0)
q.push(make_pair(pp.first-1,pp.second));
}
if(str[pp.first][pp.second] == 'W')
{
if(mark[pp.first][pp.second-1]== 0)
q.push(make_pair(pp.first,pp.second-1));
}
if(str[pp.first][pp.second] == 'E')
{
if(mark[pp.first][pp.second+1]== 0)
q.push(make_pair(pp.first,pp.second+1));
}
if(pp.first < n-1 && str[pp.first+1][pp.second] == 'N' && mark[pp.first+1][pp.second] == 0)
{
q.push(make_pair(pp.first+1,pp.second));
}
if(pp.first > 0 && str[pp.first-1][pp.second] == 'S' && mark[pp.first-1][pp.second] == 0)
{
q.push(make_pair(pp.first-1,pp.second));
}
if(pp.second < m-1 && str[pp.first][pp.second+1] == 'W' && mark[pp.first][pp.second+1] == 0)
{
q.push(make_pair(pp.first,pp.second+1));
}
if(pp.second > 0 && str[pp.first][pp.second-1] == 'E' && mark[pp.first][pp.second-1] == 0)
{
q.push(make_pair(pp.first,pp.second-1));
}
}
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i = 0; i < n;i++)
{
scanf("%s",str[i]);
}
int ans = 0;
for(int i = 0 ; i < n;i++)
{
for(int j = 0 ; j < m;j++)
{
if(mark[i][j] == 0)
{
ans++;
bfs(i,j,n,m);
}
}
}
printf("%d\n",ans);
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2hhciBzdHJbMTAxMF1bMTAxMF07CmludCBtYXJrWzEwMTBdWzEwMTBdOwp2b2lkIGJmcyhpbnQgYSxpbnQgYiwgaW50IG4sIGludCBtKQp7CnF1ZXVlPHBhaXI8aW50LGludD4gPiBxOwpxLnB1c2gobWFrZV9wYWlyKGEsYikpOwp3aGlsZSghcS5lbXB0eSgpKQp7CnBhaXI8aW50LGludD4gcHAgPSBxLmZyb250KCk7CnEucG9wKCk7CmlmKG1hcmtbcHAuZmlyc3RdW3BwLnNlY29uZF0pCmNvbnRpbnVlOwptYXJrW3BwLmZpcnN0XVtwcC5zZWNvbmRdID0gMTsKCgppZihzdHJbcHAuZmlyc3RdW3BwLnNlY29uZF0gPT0gJ1MnKQp7CmlmKG1hcmtbcHAuZmlyc3QrMV1bcHAuc2Vjb25kXT09IDApCnEucHVzaChtYWtlX3BhaXIocHAuZmlyc3QrMSxwcC5zZWNvbmQpKTsKfQoKCgppZihzdHJbcHAuZmlyc3RdW3BwLnNlY29uZF0gPT0gJ04nKQp7CmlmKG1hcmtbcHAuZmlyc3QtMV1bcHAuc2Vjb25kXT09IDApCnEucHVzaChtYWtlX3BhaXIocHAuZmlyc3QtMSxwcC5zZWNvbmQpKTsKfQoKCmlmKHN0cltwcC5maXJzdF1bcHAuc2Vjb25kXSA9PSAnVycpCnsKaWYobWFya1twcC5maXJzdF1bcHAuc2Vjb25kLTFdPT0gMCkKcS5wdXNoKG1ha2VfcGFpcihwcC5maXJzdCxwcC5zZWNvbmQtMSkpOwp9CgoKaWYoc3RyW3BwLmZpcnN0XVtwcC5zZWNvbmRdID09ICdFJykKewppZihtYXJrW3BwLmZpcnN0XVtwcC5zZWNvbmQrMV09PSAwKQpxLnB1c2gobWFrZV9wYWlyKHBwLmZpcnN0LHBwLnNlY29uZCsxKSk7Cn0KCgoKaWYocHAuZmlyc3QgPCBuLTEgJiYgc3RyW3BwLmZpcnN0KzFdW3BwLnNlY29uZF0gPT0gJ04nICYmIG1hcmtbcHAuZmlyc3QrMV1bcHAuc2Vjb25kXSA9PSAwKQp7CnEucHVzaChtYWtlX3BhaXIocHAuZmlyc3QrMSxwcC5zZWNvbmQpKTsKfQoKaWYocHAuZmlyc3QgPiAwICYmIHN0cltwcC5maXJzdC0xXVtwcC5zZWNvbmRdID09ICdTJyAmJiBtYXJrW3BwLmZpcnN0LTFdW3BwLnNlY29uZF0gPT0gMCkKewpxLnB1c2gobWFrZV9wYWlyKHBwLmZpcnN0LTEscHAuc2Vjb25kKSk7Cn0KCmlmKHBwLnNlY29uZCA8IG0tMSAmJiBzdHJbcHAuZmlyc3RdW3BwLnNlY29uZCsxXSA9PSAnVycgJiYgbWFya1twcC5maXJzdF1bcHAuc2Vjb25kKzFdID09IDApCnsKcS5wdXNoKG1ha2VfcGFpcihwcC5maXJzdCxwcC5zZWNvbmQrMSkpOwp9CgppZihwcC5zZWNvbmQgPiAwICYmIHN0cltwcC5maXJzdF1bcHAuc2Vjb25kLTFdID09ICdFJyAmJiBtYXJrW3BwLmZpcnN0XVtwcC5zZWNvbmQtMV0gPT0gMCkKewpxLnB1c2gobWFrZV9wYWlyKHBwLmZpcnN0LHBwLnNlY29uZC0xKSk7Cn0KCgoKCn0KfQppbnQgbWFpbigpCnsKICAgIGludCBuLG07CiAgICBzY2FuZigiJWQgJWQiLCZuLCZtKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuO2krKykKICAgIHsKICAgICAgICBzY2FuZigiJXMiLHN0cltpXSk7CiAgICB9CiAgICBpbnQgYW5zID0gMDsKICAgIGZvcihpbnQgIGkgPSAwIDsgaSA8IG47aSsrKQogICAgewogICAgICAgIGZvcihpbnQgIGogPSAwIDsgaiA8IG07aisrKQogICAgICAgIHsKICAgICAgICAgICAgaWYobWFya1tpXVtqXSA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhbnMrKzsKICAgICAgICAgICAgICAgIGJmcyhpLGosbixtKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHByaW50ZigiJWRcbiIsYW5zKTsKfQo=