#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long count_occurrences(const string& S, const string& P) {
int n = S.length();
int m = P.length();
if (m > n) return 0;
vector<int> pi(m, 0);
for (int i = 1, j = 0; i < m; ++i) {
while (j > 0 && P[i] != P[j]) j = pi[j - 1];
if (P[i] == P[j]) j++;
pi[i] = j;
}
long long count = 0;
for (int i = 0, j = 0; i < n; ++i) {
while (j > 0 && S[i] != P[j]) j = pi[j - 1];
if (S[i] == P[j]) j++;
if (j == m) {
count++;
j = pi[m - 1];
}
}
return count;
}
long long count_boundary_occurrences(const string& A, const string& B, const string& P) {
int m = P.length();
if (m <= 1) return 0;
int lenA = min((int)A.length(), m - 1);
int lenB = min((int)B.length(), m - 1);
string boundary_str = A.substr(A.length() - lenA) + B.substr(0, lenB);
return count_occurrences(boundary_str, P);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string P;
int n;
if (!(cin >> P >> n)) return 0;
int m = P.length();
vector<string> F = {"", "b", "a"};
if (n <= 2) {
cout << count_occurrences(F[n], P) << "\n";
return 0;
}
int k = 2;
while (k < n && F[k].length() < 2 * m) {
k++;
F.push_back(F[k - 1] + F[k - 2]);
}
vector<long long> C(n + 1, 0);
for (int i = 1; i <= k; ++i) {
C[i] = count_occurrences(F[i], P);
}
if (k == n) {
cout << C[n] << "\n";
return 0;
}
long long cross1 = count_boundary_occurrences(F[k], F[k - 1], P);
long long cross2 = count_boundary_occurrences(F[k] + F[k - 1], F[k], P);
for (int i = k + 1; i <= n; ++i) {
long long cross = ((i - k) % 2 == 1) ? cross1 : cross2;
C[i] = C[i - 1] + C[i - 2] + cross;
}
cout << C[n] << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmxvbmcgbG9uZyBjb3VudF9vY2N1cnJlbmNlcyhjb25zdCBzdHJpbmcmIFMsIGNvbnN0IHN0cmluZyYgUCkgewogICAgaW50IG4gPSBTLmxlbmd0aCgpOwogICAgaW50IG0gPSBQLmxlbmd0aCgpOwogICAgaWYgKG0gPiBuKSByZXR1cm4gMDsKCiAgICB2ZWN0b3I8aW50PiBwaShtLCAwKTsKICAgIGZvciAoaW50IGkgPSAxLCBqID0gMDsgaSA8IG07ICsraSkgewogICAgICAgIHdoaWxlIChqID4gMCAmJiBQW2ldICE9IFBbal0pIGogPSBwaVtqIC0gMV07CiAgICAgICAgaWYgKFBbaV0gPT0gUFtqXSkgaisrOwogICAgICAgIHBpW2ldID0gajsKICAgIH0KCiAgICBsb25nIGxvbmcgY291bnQgPSAwOwogICAgZm9yIChpbnQgaSA9IDAsIGogPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgd2hpbGUgKGogPiAwICYmIFNbaV0gIT0gUFtqXSkgaiA9IHBpW2ogLSAxXTsKICAgICAgICBpZiAoU1tpXSA9PSBQW2pdKSBqKys7CiAgICAgICAgaWYgKGogPT0gbSkgewogICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICBqID0gcGlbbSAtIDFdOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb3VudDsKfQoKbG9uZyBsb25nIGNvdW50X2JvdW5kYXJ5X29jY3VycmVuY2VzKGNvbnN0IHN0cmluZyYgQSwgY29uc3Qgc3RyaW5nJiBCLCBjb25zdCBzdHJpbmcmIFApIHsKICAgIGludCBtID0gUC5sZW5ndGgoKTsKICAgIGlmIChtIDw9IDEpIHJldHVybiAwOwoKICAgIGludCBsZW5BID0gbWluKChpbnQpQS5sZW5ndGgoKSwgbSAtIDEpOwogICAgaW50IGxlbkIgPSBtaW4oKGludClCLmxlbmd0aCgpLCBtIC0gMSk7CgogICAgc3RyaW5nIGJvdW5kYXJ5X3N0ciA9IEEuc3Vic3RyKEEubGVuZ3RoKCkgLSBsZW5BKSArIEIuc3Vic3RyKDAsIGxlbkIpOwogICAgcmV0dXJuIGNvdW50X29jY3VycmVuY2VzKGJvdW5kYXJ5X3N0ciwgUCk7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIHN0cmluZyBQOwogICAgaW50IG47CgogICAgaWYgKCEoY2luID4+IFAgPj4gbikpIHJldHVybiAwOwoKICAgIGludCBtID0gUC5sZW5ndGgoKTsKCiAgICB2ZWN0b3I8c3RyaW5nPiBGID0geyIiLCAiYiIsICJhIn07CgogICAgaWYgKG4gPD0gMikgewogICAgICAgIGNvdXQgPDwgY291bnRfb2NjdXJyZW5jZXMoRltuXSwgUCkgPDwgIlxuIjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpbnQgayA9IDI7CiAgICB3aGlsZSAoayA8IG4gJiYgRltrXS5sZW5ndGgoKSA8IDIgKiBtKSB7CiAgICAgICAgaysrOwogICAgICAgIEYucHVzaF9iYWNrKEZbayAtIDFdICsgRltrIC0gMl0pOwogICAgfQoKICAgIHZlY3Rvcjxsb25nIGxvbmc+IEMobiArIDEsIDApOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGs7ICsraSkgewogICAgICAgIENbaV0gPSBjb3VudF9vY2N1cnJlbmNlcyhGW2ldLCBQKTsKICAgIH0KCiAgICBpZiAoayA9PSBuKSB7CiAgICAgICAgY291dCA8PCBDW25dIDw8ICJcbiI7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgbG9uZyBsb25nIGNyb3NzMSA9IGNvdW50X2JvdW5kYXJ5X29jY3VycmVuY2VzKEZba10sIEZbayAtIDFdLCBQKTsKICAKICAgIGxvbmcgbG9uZyBjcm9zczIgPSBjb3VudF9ib3VuZGFyeV9vY2N1cnJlbmNlcyhGW2tdICsgRltrIC0gMV0sIEZba10sIFApOwoKICAgIGZvciAoaW50IGkgPSBrICsgMTsgaSA8PSBuOyArK2kpIHsKICAgICAgICBsb25nIGxvbmcgY3Jvc3MgPSAoKGkgLSBrKSAlIDIgPT0gMSkgPyBjcm9zczEgOiBjcm9zczI7CiAgICAgICAgQ1tpXSA9IENbaSAtIDFdICsgQ1tpIC0gMl0gKyBjcm9zczsKICAgIH0KCiAgICBjb3V0IDw8IENbbl0gPDwgIlxuIjsKCiAgICByZXR1cm4gMDsKfQ==