#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(ll i=a;i<b;++i)
#define per(i,a,b) for(ll i=a-1;i>=b;--i)
#define vi vector<ll>
#define vvi vector<vector<ll> >
#define piii pair<ll,pair<ll,ll> >
#define pii pair<ll,ll>
#define pb push_back
#define mp make_pair
#define lb lower_bound
#define ub upper_bound
#define F first
#define S second
#define SPD ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
string a, b, s;
ll f0, f1, M = 15111992;
vvi mta(3, vi(3, 0)), mtb(3, vi(3, 0));
ll find_string(string s1, string s2) {
ll r = 0;
rep(i, 0, s1.length() - s2.length() + 1)r += (s1.substr(i, s2.length()) == s);
return r;
}
void matrix_cal() {
f0 = find_string(a, s);
f1 = find_string(b, s);
ll tmp = find_string(a + b, s) - f0 - f1;
mta = {{0, 1, 0},
{1, 1, 0},
{0, tmp, 1}
};
tmp = find_string(b + a, s) - f0 - f1;
mtb = {{0, 1, 0},
{1, 1, 0},
{0, tmp, 1}
};
}
vvi matrix_mul(vvi m1,vvi m2){
vvi rs(3,vi(3,0));
rep(i,0,m1.size())rep(j,0,m1.size()){
rep(l, 0, m1.size())rs[i][j] = (rs[i][j] + m1[i][l] * m2[l][j]) % M;
}
return rs;
}
ll fibo_cal(ll i){
//cout << n << '\n';
//cout << f0 << ' ' << f1 << '\n';
vvi mtrs = {{1, 0, 0},
{0, 1, 0},
{0, 0, 1}};
mtb = matrix_mul(mta, mtb);
ll t = i / 2;
while(t){
if(t & 1)mtrs = matrix_mul(mtrs, mtb);
mtb = matrix_mul(mtb, mtb);
t >>= 1;
}
if(i % 2)mtrs = matrix_mul(mtrs, mta);
return (1LL * f0 * mtrs[0][1] + f1 * mtrs[1][1] + 1 * mtrs[2][1]) % M;
}
void solve(ll i){
--i;
while (--i > 0 && a.length() < s.length()) {
a = a + b;
swap(a, b);
}
if (!i) {
cout << find_string(b, s) << '\n';
return;
}
matrix_cal();
cout << fibo_cal(i) << '\n';
}
int main() {
SPD;
ll i; cin >> i >> a >> b >> s;
solve(i);
//rep(i, 3, 21)solve(i);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSByZXAoaSxhLGIpIGZvcihsbCBpPWE7aTxiOysraSkKI2RlZmluZSBwZXIoaSxhLGIpIGZvcihsbCBpPWEtMTtpPj1iOy0taSkKI2RlZmluZSB2aSB2ZWN0b3I8bGw+CiNkZWZpbmUgdnZpIHZlY3Rvcjx2ZWN0b3I8bGw+ID4KI2RlZmluZSBwaWlpIHBhaXI8bGwscGFpcjxsbCxsbD4gPgojZGVmaW5lIHBpaSBwYWlyPGxsLGxsPgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIGxiIGxvd2VyX2JvdW5kCiNkZWZpbmUgdWIgdXBwZXJfYm91bmQKI2RlZmluZSBGIGZpcnN0CiNkZWZpbmUgUyBzZWNvbmQKI2RlZmluZSBTUEQgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoMCk7Y291dC50aWUoMCkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cmluZyBhLCBiLCBzOwpsbCBmMCwgZjEsIE0gPSAxNTExMTk5MjsKdnZpIG10YSgzLCB2aSgzLCAwKSksIG10YigzLCB2aSgzLCAwKSk7CgpsbCBmaW5kX3N0cmluZyhzdHJpbmcgczEsIHN0cmluZyBzMikgewogICAgbGwgciA9IDA7CiAgICByZXAoaSwgMCwgczEubGVuZ3RoKCkgLSBzMi5sZW5ndGgoKSArIDEpciArPSAoczEuc3Vic3RyKGksIHMyLmxlbmd0aCgpKSA9PSBzKTsKICAgIHJldHVybiByOwp9CnZvaWQgbWF0cml4X2NhbCgpIHsKICAgIGYwID0gZmluZF9zdHJpbmcoYSwgcyk7CiAgICBmMSA9IGZpbmRfc3RyaW5nKGIsIHMpOwogICAgbGwgdG1wID0gZmluZF9zdHJpbmcoYSArIGIsIHMpIC0gZjAgLSBmMTsKICAgIG10YSA9IHt7MCwgMSwgMH0sCiAgICAgICAgezEsIDEsIDB9LAogICAgICAgIHswLCB0bXAsIDF9CiAgICB9OwogICAgdG1wID0gZmluZF9zdHJpbmcoYiArIGEsIHMpIC0gZjAgLSBmMTsKICAgIG10YiA9IHt7MCwgMSwgMH0sCiAgICAgICAgezEsIDEsIDB9LAogICAgICAgIHswLCB0bXAsIDF9CiAgICB9Owp9CnZ2aSBtYXRyaXhfbXVsKHZ2aSBtMSx2dmkgbTIpewogICAgdnZpIHJzKDMsdmkoMywwKSk7CiAgICByZXAoaSwwLG0xLnNpemUoKSlyZXAoaiwwLG0xLnNpemUoKSl7CiAgICAgICAgcmVwKGwsIDAsIG0xLnNpemUoKSlyc1tpXVtqXSA9IChyc1tpXVtqXSArIG0xW2ldW2xdICogbTJbbF1bal0pICUgTTsKICAgIH0KICAgIHJldHVybiByczsKfQpsbCBmaWJvX2NhbChsbCBpKXsKICAgIC8vY291dCA8PCBuIDw8ICdcbic7CiAgICAvL2NvdXQgPDwgZjAgPDwgJyAnIDw8IGYxIDw8ICdcbic7CiAgICB2dmkgbXRycyA9IHt7MSwgMCwgMH0sCiAgICAgICAgICAgICAgICB7MCwgMSwgMH0sCiAgICAgICAgICAgICAgICB7MCwgMCwgMX19OwogICAgbXRiID0gbWF0cml4X211bChtdGEsIG10Yik7CiAgICBsbCB0ID0gaSAvIDI7CiAgICB3aGlsZSh0KXsKICAgICAgICBpZih0ICYgMSltdHJzID0gbWF0cml4X211bChtdHJzLCBtdGIpOwogICAgICAgIG10YiA9IG1hdHJpeF9tdWwobXRiLCBtdGIpOwogICAgICAgIHQgPj49IDE7CiAgICB9CiAgICBpZihpICUgMiltdHJzID0gbWF0cml4X211bChtdHJzLCBtdGEpOwogICAgcmV0dXJuICgxTEwgKiBmMCAqIG10cnNbMF1bMV0gKyBmMSAqIG10cnNbMV1bMV0gKyAxICogbXRyc1syXVsxXSkgJSBNOwp9CnZvaWQgc29sdmUobGwgaSl7CiAgICAtLWk7CiAgICB3aGlsZSAoLS1pID4gMCAmJiBhLmxlbmd0aCgpIDwgcy5sZW5ndGgoKSkgewogICAgICAgIGEgPSBhICsgYjsKICAgICAgICBzd2FwKGEsIGIpOwogICAgfQogICAgaWYgKCFpKSB7CiAgICAgICAgY291dCA8PCBmaW5kX3N0cmluZyhiLCBzKSA8PCAnXG4nOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG1hdHJpeF9jYWwoKTsKICAgIGNvdXQgPDwgZmlib19jYWwoaSkgPDwgJ1xuJzsKfQppbnQgbWFpbigpIHsKICAgIFNQRDsKICAgIGxsIGk7IGNpbiA+PiBpID4+IGEgPj4gYiA+PiBzOwogICAgc29sdmUoaSk7CiAgICAvL3JlcChpLCAzLCAyMSlzb2x2ZShpKTsKICAgIHJldHVybiAwOwp9Cg==