ソースコード
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
class Main{
static void solve(){
int n = ni(), h=ni(), w=ni();
boolean[][] used = new boolean[h][w];
int[] ans = new int[n+1];
for(int i=0;i<h;++i){
String s = ns();
for(int j=0;j<w;++j){
used[i][j] = s.charAt(j)=='#';
if(!used[i][j])++ans[1];
}
}
boolean[][] tmp = new boolean[h][w];
for(int k=2;k<=n;++k){
for(int i=0;i<h;++i)for(int j=0;j<w;++j)tmp[i][j]=used[i][j];
int cnt = 0;
for(int i=0;i<h;++i){
for(int j=0;j<w;++j){
boolean flag = true;
for(int l=0;l<k;++l)if(j+l >=w || tmp[i][j+l])flag=false;
if(flag){
for(int l=0;l<k;++l)tmp[i][j+l]=true;ans[k]++;
}
}
}
for(int i=0;i<h;++i)for(int j=0;j<w;++j)tmp[i][j]=used[i][j];
for(int i=0;i<h;++i){
for(int j=0;j<w;++j){
boolean flag = true;
for(int l=0;l<k;++l)if(i+l>=h || tmp[i+l][j])flag=false;
if(flag){
for(int l=0;l<k;++l)tmp[i+l][j]=true;++cnt;
}
}
}
ans[k]=Math.max(ans[k], cnt);
}
for(int k=1;k<=n;++k)out.println(ans[k]);
}
public static void main(String[] args){
solve();
out.flush();
}
private static InputStream in = System.in;
private static PrintWriter out = new PrintWriter(System.out);
private static final byte[] buffer = new byte[1<<15];
private static int ptr = 0;
private static int buflen = 0;
private static boolean hasNextByte(){
if(ptr<buflen)return true;
ptr = 0;
try{
buflen = in.read(buffer);
} catch (IOException e){
e.printStackTrace();
}
return buflen>0;
}
private static int readByte(){ if(hasNextByte()) return buffer[ptr++]; else return -1;}
private static boolean isSpaceChar(int c){ return !(33<=c && c<=126);}
private static int skip(){int res; while((res=readByte())!=-1 && isSpaceChar(res)); return res;}
private static double nd(){ return Double.parseDouble(ns()); }
private static char nc(){ return (char)skip(); }
private static String ns(){
StringBuilder sb = new StringBuilder();
for(int b=skip();!isSpaceChar(b);b=readByte())sb.append((char)b);
return sb.toString();
}
private static int[] nia(int n){
int[] res = new int[n];
for(int i=0;i<n;++i)res[i]=ni();
return res;
}
private static long[] nla(int n){
long[] res = new long[n];
for(int i=0;i<n;++i)res[i]=nl();
return res;
}
private static int ni(){
int res=0,b;
boolean minus=false;
while((b=readByte())!=-1 && !((b>='0'&&b<='9') || b=='-'));
if(b=='-'){
minus=true;
b=readByte();
}
for(;'0'<=b&&b<='9';b=readByte())res=res*10+(b-'0');
return minus ? -res:res;
}
private static long nl(){
long res=0,b;
boolean minus=false;
while((b=readByte())!=-1 && !((b>='0'&&b<='9') || b=='-'));
if(b=='-'){
minus=true;
b=readByte();
}
for(;'0'<=b&&b<='9';b=readByte())res=res*10+(b-'0');
return minus ? -res:res;
}
}