link
#include<bits/stdc++.h>
using namespace std;
const int C=26,N=100005;
#define num(x) ((x)-'a')
long long n,l=1,r=1e18,ans;
string s,t;
long long pos[C][N],cnt[C][N],sum[C],lens,lent;
bool check(long long x){
long long tmp=1,now=1;
for(int i=0;i<lent;i++){
if(cnt[num(t[i])][now]>=x) now=pos[num(t[i])][cnt[num(t[i])][now]-x+1]+1;
else{
long long ct=x;
ct-=cnt[num(t[i])][now],tmp++;
if(ct%sum[num(t[i])]==0) tmp+=ct/sum[num(t[i])]-1,now=pos[num(t[i])][1]+1;
else tmp+=ct/sum[num(t[i])],now=pos[num(t[i])][sum[num(t[i])]-ct%sum[num(t[i])]+1]+1;
if(now==lens+1) now=1,tmp++;
}
if(tmp>n){
return 0;
}
}
return 1;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n>>s>>t;
lens=s.length(),lent=t.length();
for(int i=lens;i>=1;i--){
sum[num(s[i-1])]++;
pos[num(s[i-1])][sum[num(s[i-1])]]=i;
for(int j=0;j<26;j++) cnt[j][i]=cnt[j][i+1];
cnt[num(s[i-1])][i]++;
}
for(int i=0;i<lent;i++){
if(!cnt[num(t[i])][1]){
cout<<0<<"\n";
return 0;
}
}
while(l<=r){
long long mid=(l+r)>>1;
if(check(mid)) l=mid+1,ans=mid;
else r=mid-1;
}
cout<<ans<<"\n";
}