#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
#define int __int128
int n, sl, tl, nxt[100005][29], id[1000005];
vector<int> pos[29];
char s[100007], t[100005];
int Next(int i, int k, int c) {
if (k == 0) return i;
c -= 'a';
int tmp = i % sl, ans = i;
if (pos[c].size() == 0) return -1;
if (nxt[tmp][c] != -1) {
ans += nxt[tmp][c] - tmp;
tmp = nxt[tmp][c];
} else {
ans += pos[c][0] + sl - tmp;
tmp = pos[c][0];
}
if (ans >= n * sl) return -1;
--k;
if (k == 0) return ans;
ans += sl * (k / pos[c].size());
k %= pos[c].size();
if (k == 0) return ans;
int nextpos = pos[c][(id[tmp] + k) % (__int128)(pos[c].size())];
return ans + (nextpos - tmp + sl + sl) % sl;
}
bool check(int i) {
int pos = 0 ;
for (int j = 0; j < tl; ++j) {
pos = Next(pos, i, t[j]);
if (pos == -1 || pos >= n * sl) return 0;
++pos;
}
return 1;
}
void write(int x) {
int st[35], top = 0;
while (x) st[++top] = x % 10, x /= 10;
while (top) putchar(st[top--] + '0');
}
signed main() {
long long nn; scanf("%lld", &nn); n = nn;
scanf("%s%s", s, t);
sl = strlen(s);
tl = strlen(t);
memset(nxt, 255, sizeof(nxt));
for (int i = sl - 1; i >= 0; --i) {
pos[s[i] - 'a'].push_back(i);
id[i] = pos[s[i] - 'a'].size() - 1;
for (int c = 0; c < 28; ++c) nxt[i][c] = nxt[i + 1][c];
nxt[i][s[i] - 'a'] = i;
}
int l = 0, r = 1e18;
while (l + 1 != r) {
int mid = (l + r) / 2;
if (check(mid)) l = mid;
else r = mid;
}
write(l);
return 0;
}