http://magic.vicp.io/JudgeOnline/problem.php?cid=1349&pid=3
#include <bits/stdc++.h>
using namespace std;
char a[2600][20];
string s;
set<string> t;
int m,n;
void dfs(int i,int dep)
{
if (dep>m)
t.insert(s);
else
{
if (s[dep-1]=='*')
{
s[dep-1]='0';
dfs(i,dep+1);
s[dep-1]='1';
dfs(i,dep+1);
s[dep-1]='*';
}
else
dfs(i,dep+1);
}
}
int main()
{
scanf("%d%d",&m,&n);getchar();
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
a[i][j]=getchar();
getchar();
}
t.clear();
for (int i=1;i<=n;i++)
{
s="";
for (int j=1;j<=m;j++)
s+=a[i][j];
dfs(i,1);
}
printf("%d\n",t.size());
return 0;
}