#include <iostream>
using namespace std;
// Ham tinh hash cho mot chuoi (chi goi 1 lan cho t)
int hashing(const string &st, int p, int base) {
long long hash = 0;
for (char c : st)
hash = (hash * base + (c - 'a' + 1)) % p;
return hash;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int p;
string s, t;
cin >> p >> s >> t;
int n = s.size(), m = t.size();
const int base = 32;
// Tinh hash cho chuoi t
int hash_t = hashing(t, p, base);
long long hash_s = 0, power = 1;
// Tinh base^(m-1) % p de dung trong rolling hash
for (int i = 0; i < m - 1; ++i)
power = (power * base) % p;
// Tinh hash cho m ky tu dau tien trong s
for (int i = 0; i < m; ++i)
hash_s = (hash_s * base + (s[i] - 'a' + 1)) % p;
// So sanh lan dau tien
if (hash_s == hash_t) {
bool match = true;
for (int j = 0; j < m; ++j)
if (s[j] != t[j]) {
match = false;
break;
}
if (match) {
cout << 0;
return 0;
}
}
// Sliding window + rolling hash
for (int i = m; i < n; ++i) {
// Loai ky tu cu o dau va them ky tu moi o cuoi
hash_s = (hash_s - (s[i - m] - 'a' + 1) * power % p + p) % p;
hash_s = (hash_s * base + (s[i] - 'a' + 1)) % p;
// So sanh neu hash trung
if (hash_s == hash_t) {
bool match = true;
for (int j = 0; j < m; ++j)
if (s[i - m + 1 + j] != t[j]) {
match = false;
break;
}
if (match) {
cout << i - m + 1;
return 0;
}
}
}
// Neu khong tim duoc vi tri phu hop
cout << -1;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gSGFtIHRpbmggaGFzaCBjaG8gbW90IGNodW9pIChjaGkgZ29pIDEgbGFuIGNobyB0KQppbnQgaGFzaGluZyhjb25zdCBzdHJpbmcgJnN0LCBpbnQgcCwgaW50IGJhc2UpIHsKICAgIGxvbmcgbG9uZyBoYXNoID0gMDsKICAgIGZvciAoY2hhciBjIDogc3QpCiAgICAgICAgaGFzaCA9IChoYXNoICogYmFzZSArIChjIC0gJ2EnICsgMSkpICUgcDsKICAgIHJldHVybiBoYXNoOwp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKCiAgICBpbnQgcDsKICAgIHN0cmluZyBzLCB0OwogICAgY2luID4+IHAgPj4gcyA+PiB0OwoKICAgIGludCBuID0gcy5zaXplKCksIG0gPSB0LnNpemUoKTsKICAgIGNvbnN0IGludCBiYXNlID0gMzI7CgogICAgLy8gVGluaCBoYXNoIGNobyBjaHVvaSB0CiAgICBpbnQgaGFzaF90ID0gaGFzaGluZyh0LCBwLCBiYXNlKTsKCiAgICBsb25nIGxvbmcgaGFzaF9zID0gMCwgcG93ZXIgPSAxOwoKICAgIC8vIFRpbmggYmFzZV4obS0xKSAlIHAgZGUgZHVuZyB0cm9uZyByb2xsaW5nIGhhc2gKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbSAtIDE7ICsraSkKICAgICAgICBwb3dlciA9IChwb3dlciAqIGJhc2UpICUgcDsKCiAgICAvLyBUaW5oIGhhc2ggY2hvIG0ga3kgdHUgZGF1IHRpZW4gdHJvbmcgcwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpCiAgICAgICAgaGFzaF9zID0gKGhhc2hfcyAqIGJhc2UgKyAoc1tpXSAtICdhJyArIDEpKSAlIHA7CgogICAgLy8gU28gc2FuaCBsYW4gZGF1IHRpZW4KICAgIGlmIChoYXNoX3MgPT0gaGFzaF90KSB7CiAgICAgICAgYm9vbCBtYXRjaCA9IHRydWU7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtOyArK2opCiAgICAgICAgICAgIGlmIChzW2pdICE9IHRbal0pIHsKICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICBjb3V0IDw8IDA7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBTbGlkaW5nIHdpbmRvdyArIHJvbGxpbmcgaGFzaAogICAgZm9yIChpbnQgaSA9IG07IGkgPCBuOyArK2kpIHsKICAgICAgICAvLyBMb2FpIGt5IHR1IGN1IG8gZGF1IHZhIHRoZW0ga3kgdHUgbW9pIG8gY3VvaQogICAgICAgIGhhc2hfcyA9IChoYXNoX3MgLSAoc1tpIC0gbV0gLSAnYScgKyAxKSAqIHBvd2VyICUgcCArIHApICUgcDsKICAgICAgICBoYXNoX3MgPSAoaGFzaF9zICogYmFzZSArIChzW2ldIC0gJ2EnICsgMSkpICUgcDsKCiAgICAgICAgLy8gU28gc2FuaCBuZXUgaGFzaCB0cnVuZwogICAgICAgIGlmIChoYXNoX3MgPT0gaGFzaF90KSB7CiAgICAgICAgICAgIGJvb2wgbWF0Y2ggPSB0cnVlOwogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07ICsraikKICAgICAgICAgICAgICAgIGlmIChzW2kgLSBtICsgMSArIGpdICE9IHRbal0pIHsKICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgaSAtIG0gKyAxOwogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8gTmV1IGtob25nIHRpbSBkdW9jIHZpIHRyaSBwaHUgaG9wCiAgICBjb3V0IDw8IC0xOwp9Cg==