#include<iostream>
using namespace std;
int n, m;
int a[501][501];
int dx[]={0, -1, 0, 1};
int dy[]={-1, 0, 1, 0};
void dfs(int x, int y)
{
a[x][y] = 1;
for(int i = 0; i < 4; i++)
{
int x0 = x + dx[i];
int y0 = y + dy[i];
if(x0>=1 && x0<=n && y0>=1 && y0<=m)
{
if(!a[x0][y0])
dfs(x0, y0);
}
}
}
int cnt = 0;
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
char ch;
for(int i = 1; i <= n; i++ )
{
for(int j = 1; j <= m; j++)
{
cin>>ch;
if(ch == '*')
a[i][j] = 1;
else
a[i][j] = 0;
}
}
for(int i = 1; i <= m; i++)
{
if(!a[1][i])
dfs(1, i);
if(!a[n][i])
dfs(n,i);
}
for(int i = 1; i <= n; i++)
{
if(!a[i][1])
dfs(i, 1);
if(!a[i][m])
dfs(i, m);
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
if(!a[i
][j])
cnt++;
}
}
cout<<cnt<<endl;
//system("pause");
}
深搜第一行和最后一行,第一列和最后一列去染色。