三月二日 恶魔果实

分析:首先我们要明确一个事情,就是每一个恶魔果实可以进行的操作数

      是任意次的,可以是0,也可以是无限

      那么我们很容易就能判断出这是一个排列组合问题

就是每一位数字有多少种变化,最终把每一位数字的变化书相乘即可,由于每一个数只少都能是自己,因此每次相乘最少都是1

      因此我们只需计算出x中每一位可以变化成的数字种类,并将其挨个相乘

      即可得出最终结果

#include<bits/stdc++.h>
using namespace std;
int main(){
    int x;
    cin>>x;
    int n;
    cin>>n;
    int m[10][10]={0};
    vector<long long> v;
    while(x!=0){
        long long p=x%10;
        v.push_back(p);
        x/=10;
    }
    for(int i=0;i<n;++i){
        int a,b;
        cin>>a>>b;
        m[a][a]=1;
        m[a][b]=1;
    }
    for(int i=0;i<10;++i){
        for(int j=0;j<10;++j){
            for(int k=0;k<10;++k){
                if(m[i][j]==1 && m[j][k]==1){
                    m[i][k]=1;
                }
            }
        }
    }
    long long sum=1;
    for(int i=0;i<v.size();++i){
        int t=0; 
        for(int j=0;j<10;++j){
            if(m[v[i]][j]==1){
                t++;
            }
        }
        if(t!=0){
            sum*=t;
            sum%=10007;
        }
    }
    cout<<sum;
    return 0;
}