#include<iostream> #include<vector> #include<cstring> usingnamespace std; constint N=10,M=1<<N; int f[2][M][M]; int mp[1010]; int cnt[M]; vector<int> fst;
boolcheck(int state,int x) { for (int i = 0; i < x; i ++ ) if ((state >> i & 1) && ((state >> i + 1 & 1) || (state >> i + 2& 1))) returnfalse; returntrue; } intcount(int state,int y) { int res = 0; for (int i = 0; i < y; i ++ ) if (state >> i & 1) res ++ ; return res; }
intmain(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=0;j<m;j++){ char c; cin>>c; mp[i]+=(c=='H')<<j; } } for (int i = 0; i < 1 << m; i ++ ) if (check(i,m)) { fst.push_back(i); cnt[i] = count(i,m); } for(int i=1;i<=n+2;i++){ for(int j:fst){ for(int k:fst){ for(int u:fst){ if((j&k)|(k&u)|(u&j)) continue; if((mp[i-1]&j)|(mp[i]&k)) continue; f[i&1][j][k] = max(f[i&1][j][k],f[(i-1)&1][u][j]+ cnt[k]); } } } } cout<<f[(n+2)&1][0][0]; return0; }