Cod sursa(job #2848361)

Utilizator ShadowZoidPorojan Victor-Andrei ShadowZoid Data 12 februarie 2022 14:03:27
Problema Lista lui Andrei Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <fstream>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream cin("maxime.in");
ofstream cout("maxime.out");
int n,b,m,dp[50][50],suma,mod=104659;
bool a[50][50];
char x,y;
/*int valabil(int k)
{
    for(int i=1;i<k;i++)
    {
        if(v[i]==v[k])
            return 0;
    }
    return 1;
}
void afisare (int k)
{
    for(int i=1;i<=k;i++)
        cout<<v[i]<<" ";
    cout<<"\n";
}

void backtracking (int k)
{
    for(int i=a;i<=b;i++)
    {
        v[k]=b-i;
        if (valabil(k)==1)
        {
            if(k==n)
                afisare(k);
            else
                backtracking(k+1);
        }
    }
}*/
int main()
{
    cin>>n>>m;
  for(int i=1;i<=m;i++){
    cin>>x>>y;
    if(!a[x-'a'][y-96])
      a[x-96][y-96] = 1;
  }
  for(int j=1;j<=26;j++)
  dp[1][j] = 1;
  // suma = 26;
  for(int i=2;i<=n;i++){ // dp[i] lungimea sirului construi
    suma = 0;
    for(int j=1;j<=26;j++){ // dp[i][j] litera in  care sa se termine sirul de lungime i
      int total = 0;
      for(int j2=1;j2<=26;j2++){
        if(!a[j2][j]){
          total += dp[i-1][j2]; // j2 = a, j = c, xcb...ac
          if(total > mod)
          total = total % mod;
        }
      }
      dp[i][j] = total;
      // if(i == n){
      //   suma += total;
      //   if(suma > mod)
      //   suma = suma % mod;
      }
    }
  int solutie = 0;
  for(int i = 1; i <= 26; ++i) {
    solutie = (solutie + dp[n][i]) % mod;
  }
  cout<<solutie;
    return 0;

}