void dfs(char k,int depth){
if(depth>cnt){
ans[++num]=str;
return;
}
for(int i=head[k];i;i=edge[i].next){
char to=edge[i].to;
if(!vis[to] && in[to]-1==0){
in[to]--;
str.push_back(to);
vis[to]=true;
dfs(to,depth+1);
in[to]++;
str.pop_back();
vis[to]=false;
}
}
}