1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<cstdio>
using namespace std;
int n,k;
long long x,i2;
char tab[3020][3020];
int main ()
{
    scanf("%d %d",&n,&k);
    for(int i=10; i<n+10; i++)
        for(int j=10; j<n+10; j++)
            scanf(" %c",&tab[j][i]);

    if(k==1)
    {
        for(int i=10; i<n+10; i++)
            for(int j=10; j<n+10; j++)
                if(tab[j][i] == '.' && (tab[j-1][i]=='#' || tab[j+1][i] == '#' || tab[j][i-1] =='#' || tab[j][i+1]=='#'))
                    x++;
    }
    if(k==2)
    {
        for(int i=10; i<n+10 ;i++)
            for(int j=10; j<n+10; j++)
                if(tab[j][i] == '.' && (tab[j-1][i]=='#' || tab[j+1][i] == '#' || tab[j][i-1] =='#' || tab[j][i+1]=='#'))
                {
                    x++;
                    if(tab[j-1][i] == '.' && tab[j-2][i]!= '#' &&  tab[j-1][i-1]!='#' && tab[j-1][i+1] != '#')
                        i2++;
                    if(tab[j+1][i] == '.' && tab[j+2][i]!= '#' &&  tab[j+1][i-1]!='#' && tab[j+1][i+1] != '#')
                        i2++;
                    if(tab[j][i+1] == '.' && tab[j][i+2]!= '#' &&  tab[j-1][i+1]!='#' && tab[j+1][i+1] != '#')
                        i2++;
                    if(tab[j][i-1] == '.' && tab[j][i-2]!= '#' &&  tab[j-1][i-1]!='#' && tab[j+1][i-1] != '#')
                        i2++;
                }

        x=(x*(x-1))/2;
        x%=1000000007;
        x+=i2;
    }

    printf("%d",x);
    return 0;
}