因为很小,直接dfs枚举就可以,主要是看如何去重

这里是一种去重思路,将原来字符串排序然后直接看上一个是否使用过,如果没有使用过那说明这两个(多个)都不能用,所以不考虑放入

#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <string>
using namespace std;
#define ll long long 
string s;
vector<bool>u(12,false);
ll ans=0;
void dfs(char lst,int cnt){
    if(cnt==s.length()){
        ans++;
        return;
    }
    for(int i=0;i<s.length();i++){
        if(u[i]==1||lst==s[i]||(i>0&&s[i]==s[i-1]&&u[i-1]==0))continue;
        u[i]=true;
        dfs(s[i],cnt+1);
        u[i]=false;
    }

}
int main()
{
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    cin>>s;
    sort(s.begin(),s.end());
    dfs(' ',0);
    cout<<ans<<endl;
    //cout<<"copyright Refra1n"<<endl;
    return 0;
}