Submission #238751

#TimeUsernameProblemLanguageResultExecution timeMemory
238751SalitoTrener (COCI20_trener)C++14
110 / 110
215 ms16568 KiB
#include<bits/stdc++.h>
using namespace std;
long long const mod = 1e9+7;

unordered_map<string,pair<int,int> > h;
long long dp[56][1505];
int n,k;
int main()
{
    int i,j;
    string s;

	cin>>n>>k;

	for(i=1;i<=k;i++)
    {
        cin>>s;
        dp[0][i] = 1;
        if(!h[s].first) h[s] = {i,1};
        else h[s].second++;
    }

    for(i=1;i<n;i++)
        for(j=1;j<=k;j++)
        {
            cin>>s;
            string l,r;
            l = s.substr(0,s.size()-1);
            r = s.substr(1,s.size()-1);
            //cout<<l<<" "<<r<<endl;
            if(h[l].first)
                dp[i][j]=(dp[i][j]+dp[i-1][h[l].first]*h[l].second)%mod;
            if(h[r].first && l!=r)
                dp[i][j]=(dp[i][j]+dp[i-1][h[r].first]*h[r].second)%mod;

            if(!h[s].first) h[s] = {j,1};
            else h[s].second++;
        }

    long long ans = 0;
    for(i=1;i<=k;i++)
        ans=(ans+dp[n-1][i])%mod;

    cout<<ans<<endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...