Pagini recente » Cod sursa (job #2913151) | Cod sursa (job #2032016) | Cod sursa (job #2337264) | Cod sursa (job #249844) | Cod sursa (job #2370238)
#include <fstream>
#define MOD 104659
using namespace std;
int n, m;
unsigned long long a[26][26], part[26][26];
void inmultire(unsigned long long a[][26], unsigned long long b[][26]){
unsigned long long rez[26][26];
for(int i=0; i<26; i++){
for(int j=0; j<26; j++){
rez[i][j] = 0;
for(int k=0; k<26; k++)
rez[i][j] =(rez[i][j] + (a[i][k] * b[k][j]) % MOD) % MOD;
}
}
for(int i=0; i<26; i++)
for(int j=0; j<26; j++)
a[i][j] = rez[i][j];
return;
}
void putere(){
n--;
while(n>1){
if(n%2){
inmultire(a, part);
n--;
}
inmultire(a, a);
n/=2;
}
}
int main() {
ifstream f("nrcuv.in");
ofstream g("nrcuv.out");
f>>n>>m;
for(int i=0; i<26; i++)
for(int j=0; j<26; j++)
a[i][j] = part[i][j] = 1;
for(int i=0; i<m; i++)
{
char c, b;
f>>c>>b;
a[(int)(c-'a')][(int)(b-'a')] = part[(int)(c-'a')][(int)(b-'a')] = 0;
a[(int)(b-'a')][(int)(c-'a')] = part[(int)(b-'a')][(int)(c-'a')] = 0;
}
putere();
unsigned long long suma = 0;
for(int i=0; i<26; i++)
for(int j=0; j<26; j++)
suma=(a[i][j] + suma) % MOD;
g<<suma;
return 0;
}