Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<cstdio>#include<cstring>#include<algorithm>#define MAX 43using namespace std;int n,word[MAX];bool vis[MAX];int dfs(int now,int state){int maxi=0;for(int nex=1;nex<=n;nex++){if(vis[nex]) continue;if(state&word[nex]) continue;vis[nex]=1;maxi=max(maxi,dfs(nex,state|word[nex]));vis[nex]=0;}return now==0?maxi:maxi+1;}int main(){scanf("%d",&n);for(int i=1;i<=n;i++){char str[10];scanf("%s",&str);word[i]=0;for(int j=0;str[j];j++) word[i]|=1<<(str[j]-'a');}memset(vis,0,sizeof(vis));