#include<bits/stdc++.h>
#define int long long
using namespace std;
int n=0;
string s="",t="";
string fs2="";
vector<int>apr[26]={};
int ls=0,lt=0,lf=0,cnt[26]={};
int calc(int a,int b,char c);
bool judge(int num);
signed main(){
cin>>n>>s>>t;
fs2=" "+s+s;
ls=s.size();
lt=t.size();
lf=ls*2;
s=" "+s;
t=" "+t;
for(int i=1;i<=lf;i++){
apr[fs2[i]-'a'].push_back(i);
}
for(int i=1;i<=ls;i++){
cnt[s[i]-'a']++;
}
int l=0,r=1e17+1;
while(l+1<r){
int mid=(l+r)/2;
if(judge(mid)==true){
l=mid;
}else{
r=mid;
}
}
cout<<l<<endl;
return 0;
}
int calc(int a,int b,char c){
if(cnt[c-'a']==0){
return-1;
}
if(b>cnt[c-'a']){
int nb=b%cnt[c-'a'];
if(nb==0){
nb=cnt[c-'a'];
}
return calc(a+(b-nb)/cnt[c-'a']*ls,nb,c);
}
if(a>ls){
int na=a%ls;
if(na==0){
na=ls;
}
return calc(na,b,c)+a-na;
}
int l=0,r=apr[c-'a'].size()+1;
while(l+1<r){
int mid=(l+r)/2;
if(apr[c-'a'][mid-1]<=a){
l=mid;
}else{
r=mid;
}
}
return apr[c-'a'][r+b-2];
}
bool judge(int num){
int ans=0;
for(int i=1;i<=lt;i++){
int cc=calc(ans,num,t[i]);
if(cc==-1){
return false;
}
ans=cc;
if(ans>n*ls){
return false;
}
}
return true;
}