两个subtask都是WA
#include<bits/stdc++.h>
using namespace std;
#define N 102
#define M 11
inline int read(){
register int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if (ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
int n,m,tot,ans;
char c;
int a[N][M],F[N],s[1<<M],cnt[1<<M];
int f[3][1<<M][1<<M];
int main(){
n=read();m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>c;
if (c=='H')a[i][j]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
F[i]=(F[i]<<1)+a[i][j];
for(int i=0;i<(1<<m);i++)
if ((!(i&(i<<1)))&&(!(i&(i<<2)))&&(!(i&(i>>1)))&&(!(i&(i>>2))))s[++tot]=i,cnt[tot]=__builtin_popcount(i);
for(int i=1;i<=tot;i++)
if ((s[i]&F[1])==0)f[1][i][0]=cnt[i];
for(int i=1;i<=tot;i++)
if ((s[i]&F[2])==0)
for(int j=1;j<=tot;j++)
if ((s[i]&s[j])==0&&(s[j]&F[1])==0)f[2][i][j]=cnt[i]+cnt[j];
for(int i=3;i<=n;i++){
for(int j=1;j<=tot;j++){//i
if (F[i]&s[j])continue;
for(int k=1;k<=tot;k++){
if ((s[j]&s[k])||(F[i-1]&s[k]))continue;
for(int l=1;l<=tot;l++){
if ((s[j]&s[l])||(s[k]&s[l])||(F[i-2]&s[l]))continue;
f[i%3][j][k]=max(f[i%3][j][k],f[(i-1)%3][k][l]+cnt[j]);
}
}
}
}
for(int i=1;i<=tot;i++)
for(int j=1;j<=tot;j++)ans=max(ans,f[n%3][i][j]);
cout<<ans<<'\n';
return 0;
}