Submission details
Task:Merkkijonot
Sender:Sisuaski
Submission time:2025-11-09 03:56:00 +0200
Language:C++ (C++20)
Status:READY
Result:18
Feedback
groupverdictscore
#1ACCEPTED18
#20
#30
#40
#50
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2, 3, 4, 5details
#2ACCEPTED0.01 s2, 3, 4, 5details
#3ACCEPTED0.01 s1, 2, 3, 4, 5details
#4ACCEPTED0.01 s1, 2, 3, 4, 5details
#5ACCEPTED0.01 s1, 2, 3, 4, 5details
#6ACCEPTED0.01 s1, 2, 3, 4, 5details
#7ACCEPTED0.01 s1, 2, 3, 4, 5details
#8ACCEPTED0.01 s1, 2, 3, 4, 5details
#9ACCEPTED0.01 s1, 2, 3, 4, 5details
#10ACCEPTED0.01 s1, 2, 3, 4, 5details
#11ACCEPTED0.01 s2, 3, 4, 5details
#120.01 s2, 3, 4, 5details
#130.03 s2, 3, 4, 5details
#140.04 s2, 3, 4, 5details
#15ACCEPTED0.01 s2, 3, 4, 5details
#160.02 s2, 3, 4, 5details
#170.01 s2, 3, 4, 5details
#180.01 s2, 3, 4, 5details
#19ACCEPTED0.01 s3, 4, 5details
#200.02 s3, 4, 5details
#210.04 s3, 4, 5details
#220.04 s3, 4, 5details
#23ACCEPTED0.01 s3, 4, 5details
#240.03 s3, 4, 5details
#250.01 s3, 4, 5details
#260.01 s3, 4, 5details
#27ACCEPTED0.01 s4, 5details
#280.02 s4, 5details
#290.04 s4, 5details
#300.05 s4, 5details
#31ACCEPTED0.01 s4, 5details
#320.05 s4, 5details
#330.01 s4, 5details
#340.02 s4, 5details
#35ACCEPTED0.02 s5details
#360.02 s5details
#370.05 s5details
#380.06 s5details
#39ACCEPTED0.01 s5details
#400.08 s5details
#410.01 s5details
#420.02 s5details

Code

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
typedef long long ll;

const int Z = 1e9+7;
const int A = 'z'-'a'+1;
struct Node {
	int cs[A];
};
Node nodes[10240];
int C;

struct NN {
	vector<int> out;
	int type;
	int par;

	bool operator==(const NN& n) const {
		if (type != n.type) return 0;
		if (out.size() != n.out.size()) return 0;
		for(size_t i=0; i<out.size(); ++i) if (out[i]!=n.out[i]) return 0;
		return 1;
	}
};
NN nns[10240];
int newIdx[10240];

struct NNH {
	size_t operator()(const NN& n) const {
		size_t h=n.type;
		for(size_t i=0; i<n.out.size(); ++i) {
			h = h*3333331 + n.out[i];
		}
		return h;
	}
};

int getP(int i) {
	if (nns[i].par==i) return i;
	return nns[i].par = getP(nns[i].par);
}
void normalize(int i) {
	NN& n = nns[i];
	for(int& x: n.out) {
		x = getP(x);
	}
	sort(n.out.begin(),n.out.end());
}

struct Mat {
	static const int MS = 100;
	int a[MS][MS];

	const int* operator[](int i)const{return a[i];}
	int* operator[](int i){return a[i];}
};

Mat operator*(const Mat& a, const Mat& b) {
	Mat m;
	for(int i=0; i<C; ++i) {
		for(int j=0; j<C; ++j) {
			ll r=0;
			for(int k=0; k<C; ++k) {
				r += a[i][k] * b[k][j] % Z;
			}
			m[i][j] = r % Z;
		}
	}
	return m;
}
Mat mpow(Mat m, int e) {
	if (e==1) return m;
	Mat r = mpow(m*m,e/2);
	return e&1 ? r*m : r;
}

string s;

void addPrefix(int ci, string cur) {
	Node& c = nodes[ci];
	cur.push_back(0);
	for(int i=0; i<A; ++i) {
		cur[cur.size()-1]='a'+i;
		if (c.cs[i]<0) {
			string x = cur;
			while(x != s.substr(0,x.size())) x = x.substr(1);
			if (!x.empty()) {
				c.cs[i] = x.size();
			}
		} else if (c.cs[i]>ci) {
			addPrefix(c.cs[i], cur);
		}
	}
}

int main() {
	int n,m;
	cin>>n>>m>>s;

	memset(nodes,-1,sizeof(nodes));

	for(int k=0; k<m; ++k) {
		for(char c='a'; c<='z'; ++c) {
			string cur = s.substr(0,k) + c;
			int x=cur.size();
			for(;x>0 && s.substr(0,x)!=cur.substr(cur.size()-x);x--);
			if (!x) continue;
			nodes[k].cs[c-'a'] = x;
		}
	}
	C = m+1;

	for(int k=m-1; k>=0; --k) {
		int ci = m;
		for(int j=k; j<m; ++j) {
			int x = s[j]-'a';
			Node& c = nodes[ci];
			if (j+1<m) {
				if (c.cs[x]<0) c.cs[x] = C++;
				ci = c.cs[x];
			} else c.cs[x] = m;
			if (ci==1) break;
		}
	}
	addPrefix(m, "");

	for(int i=0; i<C; ++i) {
		nns[i].type = i==0 ? 0 : i==m ? 1 : 2;
		nns[i].par=i;
		for(int j=0; j<A; ++j) {
			int t = nodes[i].cs[j];
			if (t<0) continue;
			nns[i].out.push_back(t);
		}
	}
	bool doMerge = 1;
	while(doMerge) {
		doMerge = 0;
		unordered_map<NN,int,NNH> nmap;
		for(int i=0; i<C; ++i) {
			auto it = nmap.find(nns[i]);
			if (it == nmap.end()) {
				nmap[nns[i]] = i;
			} else {
				nns[i].par = it->second;
				doMerge = 1;
			}
		}

		for(int i=0; i<C; ++i) {
			normalize(i);
		}

		int cc=0;
		for(int i=0; i<C; ++i) {
			if (nns[i].par != i) continue;
			newIdx[i] = cc;
			nns[cc] = nns[i];
			nns[cc].par = cc;
			cc++;
		}
		C = cc;

		for(int i=0; i<C; ++i) {
			for(int& x: nns[i].out) x = newIdx[x];
		}
	}

	int st=0,ed=0;
	for(int i=0; i<C; ++i) {
		if (nns[i].type==0) st=i;
		if (nns[i].type==1) ed=i;
	}

	Mat mat={};
	for(int i=0; i<C; ++i) {
		for(int t: nns[i].out) mat[i][t]++;
	}
	Mat res = mpow(mat,n);
	cout<<res[st][ed]<<'\n';
}

Test details

Test 1

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
1 1
a

correct output
1

user output
1

Test 2

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
20 20
ssxfykmuzljmwgyvldnu

correct output
1

user output
1

Test 3

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
aaaaaaaaaa

correct output
1

user output
1

Test 4

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
aabbbaaaab

correct output
1532

user output
1532

Test 5

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
aabbacbdca

correct output
1542

user output
1542

Test 6

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
ztknszhrby

correct output
3261

user output
3261

Test 7

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 1
a

correct output
1

user output
1

Test 8

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
aabbbbbbba

correct output
1689

user output
1689

Test 9

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 8
abxabyab

correct output
8619

user output
8619

Test 10

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
20 10
ababababab

correct output
509

user output
509

Test 11

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
1

Test 12

Group: 2, 3, 4, 5

Verdict:

input
100 50
bbaaabbbbbabbbbabababababbbaab...

correct output
511493117

user output
83263915

Feedback: Incorrect character on line 1 col 1: expected "511493117", got "83263915"

Test 13

Group: 2, 3, 4, 5

Verdict:

input
100 50
addabbbbbadddccadcabaacbbbaabd...

correct output
618572722

user output
448207441

Feedback: Incorrect character on line 1 col 1: expected "618572722", got "448207441"

Test 14

Group: 2, 3, 4, 5

Verdict:

input
100 50
rrdumiqrjewanjplbyvkaytbcyzbyl...

correct output
35126431

user output
-955376902

Feedback: Incorrect character on line 1 col 1: expected "35126431", got "-955376902"

Test 15

Group: 2, 3, 4, 5

Verdict: ACCEPTED

input
100 1
a

correct output
1

user output
1

Test 16

Group: 2, 3, 4, 5

Verdict:

input
100 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
460606355

user output
163103641

Feedback: Incorrect character on line 1 col 1: expected "460606355", got "163103641"

Test 17

Group: 2, 3, 4, 5

Verdict:

input
100 23
aybabtuxaybabtuyaybabtu

correct output
342213037

user output
-717469210

Feedback: Incorrect character on line 1 col 1: expected "342213037", got "-717469210"

Test 18

Group: 2, 3, 4, 5

Verdict:

input
100 50
ababababababababababababababab...

correct output
775006564

user output
501479595

Feedback: Incorrect character on line 1 col 1: expected "775006564", got "501479595"

Test 19

Group: 3, 4, 5

Verdict: ACCEPTED

input
1000 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
1

Test 20

Group: 3, 4, 5

Verdict:

input
1000 50
bbabaabbabbbaaaaaaaaaababaabbb...

correct output
911592620

user output
344011041

Feedback: Incorrect character on line 1 col 1: expected "911592620", got "344011041"

Test 21

Group: 3, 4, 5

Verdict:

input
1000 50
cacabdddcbdadabdcbdddbdddbaccb...

correct output
12869296

user output
-440647150

Feedback: Incorrect character on line 1 col 1: expected "12869296", got "-440647150"

Test 22

Group: 3, 4, 5

Verdict:

input
1000 50
tqoyadbshyehwcwaxbtbsqtaswkyet...

correct output
741984969

user output
-274374835

Feedback: Incorrect character on line 1 col 1: expected "741984969", got "-274374835"

Test 23

Group: 3, 4, 5

Verdict: ACCEPTED

input
1000 1
a

correct output
1

user output
1

Test 24

Group: 3, 4, 5

Verdict:

input
1000 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
599950419

user output
-613213226

Feedback: Incorrect character on line 1 col 1: expected "599950419", got "-613213226"

Test 25

Group: 3, 4, 5

Verdict:

input
1000 23
aybabtuxaybabtuyaybabtu

correct output
548809016

user output
-617186460

Feedback: Incorrect character on line 1 col 1: expected "548809016", got "-617186460"

Test 26

Group: 3, 4, 5

Verdict:

input
1000 50
ababababababababababababababab...

correct output
765799780

user output
-404703540

Feedback: Incorrect character on line 1 col 1: expected "765799780", got "-404703540"

Test 27

Group: 4, 5

Verdict: ACCEPTED

input
1000000 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
1

Test 28

Group: 4, 5

Verdict:

input
1000000 50
bbaababbaaabbabababbaaaaaabbaa...

correct output
514073453

user output
-728177180

Feedback: Incorrect character on line 1 col 1: expected "514073453", got "-728177180"

Test 29

Group: 4, 5

Verdict:

input
1000000 50
aabccabbbbabccabcdcdadbcdccdac...

correct output
438094288

user output
300773358

Feedback: Incorrect character on line 1 col 1: expected "438094288", got "300773358"

Test 30

Group: 4, 5

Verdict:

input
1000000 50
yzfzimxrxfukhlkrtaylohyuqkupsn...

correct output
905445077

user output
748323805

Feedback: Incorrect character on line 1 col 1: expected "905445077", got "748323805"

Test 31

Group: 4, 5

Verdict: ACCEPTED

input
1000000 1
a

correct output
1

user output
1

Test 32

Group: 4, 5

Verdict:

input
1000000 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
280596224

user output
251799135

Feedback: Incorrect character on line 1 col 2: expected "280596224", got "251799135"

Test 33

Group: 4, 5

Verdict:

input
1000000 23
aybabtuxaybabtuyaybabtu

correct output
268144314

user output
-610970266

Feedback: Incorrect character on line 1 col 1: expected "268144314", got "-610970266"

Test 34

Group: 4, 5

Verdict:

input
1000000 50
ababababababababababababababab...

correct output
655244665

user output
-531147587

Feedback: Incorrect character on line 1 col 1: expected "655244665", got "-531147587"

Test 35

Group: 5

Verdict: ACCEPTED

input
1000000000 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
1

Test 36

Group: 5

Verdict:

input
1000000000 50
abbbaabbaaaaabbbbabbabbaaaaaba...

correct output
911059863

user output
-539993096

Feedback: Incorrect character on line 1 col 1: expected "911059863", got "-539993096"

Test 37

Group: 5

Verdict:

input
1000000000 50
cbabbcaadabbcabbdbdabbbcccbdca...

correct output
994268014

user output
-68995607

Feedback: Incorrect character on line 1 col 1: expected "994268014", got "-68995607"

Test 38

Group: 5

Verdict:

input
1000000000 50
pehyicejeninplaczwezhahmbhwfwi...

correct output
837165971

user output
-613830403

Feedback: Incorrect character on line 1 col 1: expected "837165971", got "-613830403"

Test 39

Group: 5

Verdict: ACCEPTED

input
1000000000 1
a

correct output
1

user output
1

Test 40

Group: 5

Verdict:

input
1000000000 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
114333489

user output
-838940458

Feedback: Incorrect character on line 1 col 1: expected "114333489", got "-838940458"

Test 41

Group: 5

Verdict:

input
1000000000 23
aybabtuxaybabtuyaybabtu

correct output
628064772

user output
366203809

Feedback: Incorrect character on line 1 col 1: expected "628064772", got "366203809"

Test 42

Group: 5

Verdict:

input
1000000000 50
ababababababababababababababab...

correct output
802946327

user output
-161034258

Feedback: Incorrect character on line 1 col 1: expected "802946327", got "-161034258"