Submission details
Task:Merkkijonot
Sender:sharph2
Submission time:2025-11-09 15:51:34 +0200
Language:C++ (C++17)
Status:READY
Result:18
Feedback
groupverdictscore
#1ACCEPTED18
#20
#30
#40
#50
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3, 4, 5details
#2ACCEPTED0.05 s2, 3, 4, 5details
#3ACCEPTED0.00 s1, 2, 3, 4, 5details
#4ACCEPTED0.04 s1, 2, 3, 4, 5details
#5ACCEPTED0.05 s1, 2, 3, 4, 5details
#6ACCEPTED0.58 s1, 2, 3, 4, 5details
#7ACCEPTED0.00 s1, 2, 3, 4, 5details
#8ACCEPTED0.06 s1, 2, 3, 4, 5details
#9ACCEPTED0.29 s1, 2, 3, 4, 5details
#10ACCEPTED0.03 s1, 2, 3, 4, 5details
#11ACCEPTED0.01 s2, 3, 4, 5details
#12--2, 3, 4, 5details
#13--2, 3, 4, 5details
#14--2, 3, 4, 5details
#15ACCEPTED0.00 s2, 3, 4, 5details
#16--2, 3, 4, 5details
#17--2, 3, 4, 5details
#18--2, 3, 4, 5details
#19ACCEPTED0.03 s3, 4, 5details
#20--3, 4, 5details
#21--3, 4, 5details
#22--3, 4, 5details
#23ACCEPTED0.00 s3, 4, 5details
#24--3, 4, 5details
#25--3, 4, 5details
#26--3, 4, 5details
#27--4, 5details
#28--4, 5details
#29--4, 5details
#30--4, 5details
#31--4, 5details
#32--4, 5details
#33--4, 5details
#34--4, 5details
#35--5details
#36--5details
#37--5details
#38--5details
#39--5details
#40--5details
#41--5details
#42--5details

Code

#include <algorithm>
#include <array>
#include <chrono>
#include <iostream>
#include <map>
#include <random>
#include <string>
#include <vector>

using namespace std;

using Z = long long int;

constexpr Z M = 1000000007;

Z brute(Z n, const string& leimasin)
{
    Z m = leimasin.size();

    map<string, Z> tila;
    tila[string() + leimasin[0]] = (Z{1} << (m - 1));

    for(Z i = 1; i < n; ++i) {
        map<string, Z> uusiTila;
        for(const auto& [mjono, maski] : tila) {
            for(Z j = 0; j < m; ++j) {
                if(maski & (Z{1} << j)) {
                    if(j == 0) {
                        for(Z k = 0; k < m; ++k) {
                            uusiTila[mjono + leimasin[k]] |= (Z{1} << (m - k - 1));
                        }
                    } else {
                        uusiTila[mjono + leimasin[m - j]] |= (Z{1} << (j - 1));
                        uusiTila[mjono + leimasin[0]] |= (Z{1} << (m - 1));
                    }
                }
            }
        }
        tila = std::move(uusiTila);
    }
    Z ret = 0;
    for(const auto& [mjono, maski] : tila) {
        if(maski & 1) {
            ++ret;
        }
    }
    return ret % M;
}

Z ratk(Z n, const string& leimasin)
{
    Z m = leimasin.size();

    map<string, Z> tila;
    tila[string() + leimasin[0]] = (Z{1} << (m - 1));

    for(Z i = 1; i < n; ++i) {
        map<string, Z> uusiTila;
        for(const auto& [mjono, maski] : tila) {
            for(Z j = 0; j < m; ++j) {
                if(maski & (Z{1} << j)) {
                    if(j == 0) {
                        for(Z k = 0; k < m; ++k) {
                            uusiTila[mjono + leimasin[k]] |= (Z{1} << (m - k - 1));
                        }
                    } else {
                        uusiTila[mjono + leimasin[m - j]] |= (Z{1} << (j - 1));
                        uusiTila[mjono + leimasin[0]] |= (Z{1} << (m - 1));
                    }
                }
            }
        }
        tila = std::move(uusiTila);
    }
    Z ret = 0;
    for(const auto& [mjono, maski] : tila) {
        if(maski & 1) {
            ++ret;
        }
    }
    return ret % M;
}

void testaa() {
    std::mt19937 rng;
    auto start = chrono::steady_clock::now();
    Z tc = 0;
    while(true) {
        Z n = uniform_int_distribution<Z>(1, 14)(rng);
        Z m = uniform_int_distribution<Z>(1, n)(rng);
        char a = uniform_int_distribution<char>('a', 'z')(rng);
        char b = uniform_int_distribution<char>('a', 'z')(rng);
        if(a > b) {
            swap(a, b);
        }
        string leimasin(m, ' ');
        for(char& c : leimasin) {
            c = uniform_int_distribution<char>(a, b)(rng);
        }
        Z ret1 = brute(n, leimasin);
        Z ret2 = ratk(n, leimasin);
        if(ret1 != ret2) {
            cerr << "VIRHE: " << n << " " << m << " " << leimasin << " " << ret1 << " " << ret2 << "\n";
            throw 5;
        }
        ++tc;
        if(tc % 1000 == 0) {
            cerr << tc << ": " << (1e-6 * (double)chrono::duration_cast<chrono::nanoseconds>(chrono::steady_clock::now() - start).count()) / (double)tc << " ms\n";
        }
    }
}

int main() {
    // testaa();

    Z n, m;
    cin >> n >> m;

    string leimasin;
    cin >> leimasin;
    if((Z)leimasin.size() != m) throw 5;

    cout << brute(n, leimasin) << "\n";

    return 0;
}

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
(empty)

Test 13

Group: 2, 3, 4, 5

Verdict:

input
100 50
addabbbbbadddccadcabaacbbbaabd...

correct output
618572722

user output
(empty)

Test 14

Group: 2, 3, 4, 5

Verdict:

input
100 50
rrdumiqrjewanjplbyvkaytbcyzbyl...

correct output
35126431

user output
(empty)

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
(empty)

Test 17

Group: 2, 3, 4, 5

Verdict:

input
100 23
aybabtuxaybabtuyaybabtu

correct output
342213037

user output
(empty)

Test 18

Group: 2, 3, 4, 5

Verdict:

input
100 50
ababababababababababababababab...

correct output
775006564

user output
(empty)

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
(empty)

Test 21

Group: 3, 4, 5

Verdict:

input
1000 50
cacabdddcbdadabdcbdddbdddbaccb...

correct output
12869296

user output
(empty)

Test 22

Group: 3, 4, 5

Verdict:

input
1000 50
tqoyadbshyehwcwaxbtbsqtaswkyet...

correct output
741984969

user output
(empty)

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
(empty)

Test 25

Group: 3, 4, 5

Verdict:

input
1000 23
aybabtuxaybabtuyaybabtu

correct output
548809016

user output
(empty)

Test 26

Group: 3, 4, 5

Verdict:

input
1000 50
ababababababababababababababab...

correct output
765799780

user output
(empty)

Test 27

Group: 4, 5

Verdict:

input
1000000 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
(empty)

Test 28

Group: 4, 5

Verdict:

input
1000000 50
bbaababbaaabbabababbaaaaaabbaa...

correct output
514073453

user output
(empty)

Test 29

Group: 4, 5

Verdict:

input
1000000 50
aabccabbbbabccabcdcdadbcdccdac...

correct output
438094288

user output
(empty)

Test 30

Group: 4, 5

Verdict:

input
1000000 50
yzfzimxrxfukhlkrtaylohyuqkupsn...

correct output
905445077

user output
(empty)

Test 31

Group: 4, 5

Verdict:

input
1000000 1
a

correct output
1

user output
(empty)

Test 32

Group: 4, 5

Verdict:

input
1000000 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
280596224

user output
(empty)

Test 33

Group: 4, 5

Verdict:

input
1000000 23
aybabtuxaybabtuyaybabtu

correct output
268144314

user output
(empty)

Test 34

Group: 4, 5

Verdict:

input
1000000 50
ababababababababababababababab...

correct output
655244665

user output
(empty)

Test 35

Group: 5

Verdict:

input
1000000000 50
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1

user output
(empty)

Test 36

Group: 5

Verdict:

input
1000000000 50
abbbaabbaaaaabbbbabbabbaaaaaba...

correct output
911059863

user output
(empty)

Test 37

Group: 5

Verdict:

input
1000000000 50
cbabbcaadabbcabbdbdabbbcccbdca...

correct output
994268014

user output
(empty)

Test 38

Group: 5

Verdict:

input
1000000000 50
pehyicejeninplaczwezhahmbhwfwi...

correct output
837165971

user output
(empty)

Test 39

Group: 5

Verdict:

input
1000000000 1
a

correct output
1

user output
(empty)

Test 40

Group: 5

Verdict:

input
1000000000 50
aabbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
114333489

user output
(empty)

Test 41

Group: 5

Verdict:

input
1000000000 23
aybabtuxaybabtuyaybabtu

correct output
628064772

user output
(empty)

Test 42

Group: 5

Verdict:

input
1000000000 50
ababababababababababababababab...

correct output
802946327

user output
(empty)