Cod sursa(job #2161346)

Utilizator SenibelanMales Sebastian Senibelan Data 11 martie 2018 17:04:34
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#define letters ('z' - 'a' + 1)

using namespace std;

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

const int MOD = 104659;
const int NMAX = 1005;
int N, M;
int DP[NMAX][30];
bool V[30][30];

void Read(){
    in >> N >> M;
    in.get();
    for(int i = 1; i <= M; ++i){
        char a, b;
        in >> a >> b;
        V[a - 'a' + 1][b - 'a' + 1] = true;
        V[b - 'a' + 1][a - 'a' + 1] = true;
    }
}

void Solve(){
    for(int i = 1; i <= letters; ++i)
        DP[1][i] = 1;
    for(int i = 2; i <= N; ++i)
        for(int j = 1; j <= letters; ++j)
            for(int k = 1; k <= letters; ++k)
                if(V[j][k] == false)
                    DP[i][j] = (DP[i][j] + DP[i - 1][k]) % MOD;

}

void Print(){
    int sol = 0;
    for(int i = 1; i <= letters; ++i)
        sol = (sol + DP[N][i]) % MOD;
    out << sol << "\n";
}

int main(){
    Read();
    Solve();
    Print();
    return 0;
}