Cod sursa(job #2226004)

Utilizator lucametehauDart Monkey lucametehau Data 29 iulie 2018 09:32:17
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int SIGMA = 26;
const int CMAX = 729;
const int NMAX = 1e3;
const int MOD = 104659;

int n, m;

char a, b;

int dp[1 + NMAX][1 + SIGMA];
bool f[1 + CMAX];
vector <int> g[1 + NMAX];

int main() {
  cin >> n >> m;
  for(int i = 1; i <= m; i++) {
    cin >> a >> b;
    int ca = a - 'a' + 1, cb = b - 'a' + 1;
    if(ca > cb)
      swap(ca, cb);
    if(!f[ca * 27 + cb]) {
      g[ca].push_back(cb);
      if(ca != cb)
        g[cb].push_back(ca);
      f[ca * 27 + cb] = 1;
    }
  }
  for(int i = 1; i <= SIGMA; i++)
    dp[1][i] = 1;
  for(int i = 2; i <= n; i++) {
    int sum = 0;
    for(int j = 1; j <= SIGMA; j++)
      sum = (sum + dp[i - 1][j]) % MOD;
    for(int j = 1; j <= SIGMA; j++) {
      dp[i][j] = sum;
      for(int k = 0; k < g[j].size(); k++)
        dp[i][j] = (dp[i][j] - dp[i - 1][g[j][k]] + MOD) % MOD;
    }
  }
  int sum = 0;
  for(int i = 1; i <= SIGMA; i++)
    sum = (sum + dp[n][i]) % MOD;
  cout << sum;
  return 0;
}