Cod sursa(job #2150752)

Utilizator Alex18maiAlex Enache Alex18mai Data 3 martie 2018 19:19:01
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>

using namespace std;

ifstream cin ("nrcuv.in");
ofstream cout ("nrcuv.out");

bool used[30][30];

const int MOD = 104659;

int dp[2][30];

int main()
{
    int n , m;
    cin>>n>>m;

    for (int i=1; i<=m; i++){
        char a , b;
        cin>>a>>b;
        int A = a - 'a';
        int B = b - 'a';
        //cout<<A<<" "<<B<<'\n';
        used[A][B] = true;
        used[B][A] = true;
    }
    //cout<<'a' - 'a' <<" "<<'z' - 'a'<<'\n';

    for (int i=0; i<=25; i++){
        dp[0][i] = 1;
    }

    for (int i=1; i<n; i++){
        for (int j=0; j<=25; j++){
            for (int k=0; k<=25; k++){
                if (!used[j][k]){
                    dp[1][k] += dp[0][j];
                }
            }
        }
        for (int j=0; j<=25; j++){
            dp[0][j] = dp[1][j];
            dp[0][j] %= MOD;
            dp[1][j] = 0;
        }
    }

    int sum = 0;

    for (int i=0; i<=25; i++){
        sum += dp[0][i];
    }

    sum %= MOD;
    cout<<sum;

    return 0;
}