Cod sursa(job #1515536)

Utilizator FairPlay94George Cioroiu FairPlay94 Data 1 noiembrie 2015 19:28:23
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <iostream>
#include <set>
#include <climits>
#include <map>
#include <algorithm>
#include <list>
#include <vector>
#include <utility>

using namespace std;

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

    ios::sync_with_stdio(false);
    cin.tie(0);

    int c[30][30], n, m, dp[30][1005];
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        char a, b;
        cin >> a >> b;
        c[a - 'a'][b - 'a'] = c[b - 'a'][a - 'a'] = 1;
    }
    for (int i = 'a'; i <= 'z'; i++) {
        dp[i - 'a'][1] = 1;
    }
    for (int j = 1; j < n; j++) {
        for (int i = 'a'; i <= 'z'; i++) {
            for (int k = 'a'; k <= 'z'; k++) {
                if (c[i - 'a'][k - 'a'] == 0) {
                    dp[k - 'a'][j + 1] = (dp[k - 'a'][j + 1] + dp[i - 'a'][j]) % 104659;
                }
            }
        }
    }
    int ans = 0;
    for (int i = 'a'; i <= 'z'; i++) {
        ans = (ans + dp[i - 'a'][n]) % 104659;
    }
    cout << ans;

    return 0;
}