#include <bits/stdc++.h>
using namespace std;
#define fori(i, a, b) for (int i = a; i < b; ++i)
#define ll long long
#define m 4
#define L(a) a.size()
const int MD = 15111992;
const int ardv[m][m] = {{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}};
const int arta[m][m] = {{0, 1, 0, 0}, {1, 1, 1, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}};
const int artb[m][m] = {{0, 1, 0, 0}, {1, 1, 0, 1}, {0, 0, 1, 0}, {0, 0, 0, 1}};
int n;
string s1, s2, t, s;
struct matrix {
int a[m][m];
matrix() {
fori(i, 0, m) fori(j, 0, m) a[i][j] = 0;
}
matrix operator * (matrix b) {
matrix c;
fori(i, 0, m) fori(j, 0, m) c.a[i][j] = 0;
fori(i, 0, m) fori(j, 0, m) fori(t, 0, m)
c.a[i][j] = (c.a[i][j] + (ll)a[i][t] * b.a[t][j] % MD) % MD;
return c;
}
} ans, dv, ta, tb;
matrix multiPower(matrix a, int n) {
if (!n) return dv;
matrix g = multiPower(a, n / 2);
g = g * g;
return (n % 2) ? a * g : g;
}
int compare(string a, string b, int j) {
fori(i, 0, L(a))
if (a[i] != b[j++]) return 0;
return 1;
}
int get(string a, string b) {
int tmp = 0;
fori(i, 0, L(b) - L(a) + 1) tmp += compare(a, b, i);
return tmp;
}
void enter() {
cin >> n >> s1 >> s2 >> s;
n -= 2;
while (n && (L(s1) < L(s) || L(s2) < L(s))) {
--n;
t = s2 + s1; s1 = s2; s2 = t;
}
}
void built() {
fori(i, 0, m) fori(j, 0, m) {
dv.a[i][j] = ardv[i][j];
ta.a[i][j] = arta[i][j];
tb.a[i][j] = artb[i][j];
}
ans.a[0][0] = get(s, s2);
--n;
ans.a[1][0] = get(s, s2 + s1);
ans.a[2][0] = get(s, s1 + s2) - get(s, s1) - get(s, s2);
ans.a[3][0] = get(s, s2 + s2) - 2 * get(s, s2);
}
void solve() {
if (n % 2 == 0) ans = multiPower(tb * ta, n / 2) * ans; else {
ans = ta * ans;
ans = multiPower(ta * tb, n / 2) * ans;
}
cout << ans.a[1][0];
}
int main() {
enter();
if (!n) { cout << get(s, s2); return 0; }
built();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZm9yaShpLCBhLCBiKSBmb3IgKGludCBpID0gYTsgaSA8IGI7ICsraSkKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBtIDQKI2RlZmluZSBMKGEpIGEuc2l6ZSgpCgpjb25zdCBpbnQgTUQgPSAxNTExMTk5MjsKY29uc3QgaW50IGFyZHZbbV1bbV0gPSB7ezEsIDAsIDAsIDB9LCB7MCwgMSwgMCwgMH0sIHswLCAwLCAxLCAwfSwgezAsIDAsIDAsIDF9fTsKY29uc3QgaW50IGFydGFbbV1bbV0gPSB7ezAsIDEsIDAsIDB9LCB7MSwgMSwgMSwgMH0sIHswLCAwLCAxLCAwfSwgezAsIDAsIDAsIDF9fTsKY29uc3QgaW50IGFydGJbbV1bbV0gPSB7ezAsIDEsIDAsIDB9LCB7MSwgMSwgMCwgMX0sIHswLCAwLCAxLCAwfSwgezAsIDAsIDAsIDF9fTsKCmludCBuOwpzdHJpbmcgczEsIHMyLCB0LCBzOwoKc3RydWN0IG1hdHJpeCB7CglpbnQgYVttXVttXTsKCW1hdHJpeCgpIHsKCQlmb3JpKGksIDAsIG0pIGZvcmkoaiwgMCwgbSkgYVtpXVtqXSA9IDA7IAoJfQoJbWF0cml4IG9wZXJhdG9yICogKG1hdHJpeCBiKSB7CgkJbWF0cml4IGM7CgkJZm9yaShpLCAwLCBtKSBmb3JpKGosIDAsIG0pIGMuYVtpXVtqXSA9IDA7CgkJZm9yaShpLCAwLCBtKSBmb3JpKGosIDAsIG0pIGZvcmkodCwgMCwgbSkgCgkJCWMuYVtpXVtqXSA9IChjLmFbaV1bal0gKyAobGwpYVtpXVt0XSAqIGIuYVt0XVtqXSAlIE1EKSAlIE1EOwoJCXJldHVybiBjOwoJfQp9IGFucywgZHYsIHRhLCB0YjsKCm1hdHJpeCBtdWx0aVBvd2VyKG1hdHJpeCBhLCBpbnQgbikgewoJaWYgKCFuKSByZXR1cm4gZHY7CgltYXRyaXggZyA9IG11bHRpUG93ZXIoYSwgbiAvIDIpOwoJZyA9IGcgKiBnOwoJcmV0dXJuIChuICUgMikgPyBhICogZyA6IGc7Cn0KCmludCBjb21wYXJlKHN0cmluZyBhLCBzdHJpbmcgYiwgaW50IGopIHsKCWZvcmkoaSwgMCwgTChhKSkgCgkJaWYgKGFbaV0gIT0gYltqKytdKSByZXR1cm4gMDsKCXJldHVybiAxOyAKfQoKaW50IGdldChzdHJpbmcgYSwgc3RyaW5nIGIpIHsKCWludCB0bXAgPSAwOwoJZm9yaShpLCAwLCBMKGIpIC0gTChhKSArIDEpIHRtcCArPSBjb21wYXJlKGEsIGIsIGkpOyAKCXJldHVybiB0bXA7Cn0KCnZvaWQgZW50ZXIoKSB7CgljaW4gPj4gbiA+PiBzMSA+PiBzMiA+PiBzOwoJbiAtPSAyOwoJd2hpbGUgKG4gJiYgKEwoczEpIDwgTChzKSB8fCBMKHMyKSA8IEwocykpKSB7CgkJLS1uOwoJCXQgPSBzMiArIHMxOyBzMSA9IHMyOyBzMiA9IHQ7Cgl9CQp9Cgp2b2lkIGJ1aWx0KCkgewoJZm9yaShpLCAwLCBtKSBmb3JpKGosIDAsIG0pIHsKCQlkdi5hW2ldW2pdID0gYXJkdltpXVtqXTsKCQl0YS5hW2ldW2pdID0gYXJ0YVtpXVtqXTsKCQl0Yi5hW2ldW2pdID0gYXJ0YltpXVtqXTsKCX0KCWFucy5hWzBdWzBdID0gZ2V0KHMsIHMyKTsKCS0tbjsKCWFucy5hWzFdWzBdID0gZ2V0KHMsIHMyICsgczEpOyAKCWFucy5hWzJdWzBdID0gZ2V0KHMsIHMxICsgczIpIC0gZ2V0KHMsIHMxKSAtIGdldChzLCBzMik7CglhbnMuYVszXVswXSA9IGdldChzLCBzMiArIHMyKSAtIDIgKiBnZXQocywgczIpOyAKfQoKdm9pZCBzb2x2ZSgpIHsgCglpZiAobiAlIDIgPT0gMCkgYW5zID0gbXVsdGlQb3dlcih0YiAqIHRhLCBuIC8gMikgKiBhbnM7IGVsc2UgewoJCWFucyA9IHRhICogYW5zOwoJCWFucyA9IG11bHRpUG93ZXIodGEgKiB0YiwgbiAvIDIpICogYW5zOwoJfQoJY291dCA8PCBhbnMuYVsxXVswXTsKfQoKaW50IG1haW4oKSB7CgllbnRlcigpOwoJaWYgKCFuKSB7IGNvdXQgPDwgZ2V0KHMsIHMyKTsgcmV0dXJuIDA7IH0KCWJ1aWx0KCk7Cglzb2x2ZSgpOwoJcmV0dXJuIDA7Cn0=