Cod sursa(job #1580704)

Utilizator Burbon13Burbon13 Burbon13 Data 26 ianuarie 2016 00:58:36
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>

using namespace std;

const int nmx = 1002;
const int crx = 30;
const int mod = 104659;

int n,m,dp[2][crx];
bool mat[crx][crx];

inline int toint(const char &c) {
    return (int)c - 96;
}

int main() {
    freopen("nrcuv.in", "r", stdin);
    freopen("nrcuv.out", "w", stdout);

    scanf("%d %d\n", &n, &m);
    for(int i = 1; i <= m; ++i) {
        char c1,c2;
        scanf("%c %c\n", &c1, &c2);
        mat[toint(c1)][toint(c2)] = true;
        mat[toint(c2)][toint(c1)] = true;
    }

    bool pos = 0;

    for(int i = 1; i <= 26; ++i)
        dp[0][i] = 1;

    for(int l = 2; l <= n; ++l) {
        pos = pos ^ 1;
        for(int i = 1; i <= 26; ++i) {
            dp[pos][i] = 0;
            for(int j = 1; j <= 26; ++j)
                if(not mat[i][j])
                    dp[pos][i] = (dp[pos][i] + dp[pos^1][j]) % mod ;
        }
    }

    int sum = 0;

    for(int i = 1; i <= 26; ++i)
        sum = (sum + dp[pos][i]) % mod;

    printf("%d\n", sum);

    return 0;
}