#include<iostream>
#include<cstring>
#include<cstdio>
#define MN 1000000
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
char s[MN+5],t[MN+5];
int last[MN+5][26],a[MN+5],n,ans=0;
int main()
{
	n=read();
	scanf("%s%s",s+1,t+1);
	for(int i=1;i<=n;++i) 
	{
		memcpy(last[i],last[i-1],sizeof(last[0]));
		last[i][s[i]-'a']=i;
	}
	for(int i=n,j=n,r=0,k=0;i;--i)
	{
		if(j>i) j=i;
		if(s[j]!=t[i])
		{
			if(!last[j][t[i]-'a']) return 0*puts("-1");
			j=last[j][t[i]-'a'];
			++r;++k;ans=max(ans,k);
			++a[j+r];
		}
		k-=a[i+r];a[i+r]=0;
	}
	cout<<ans;
	return 0;
}


#include <cstdio>
using namespace std;
#define REP(a,b,c) for(int a=b;a<=c;++a)
#define RREP(a,b,c) for(int a=b;a>=c;--a)

char s[1000005],t[1000005];
int n,x[1000005],l,r,ans,q,j;

int main() {
	scanf("%d%s%s",&n,s+1,t+1);
	j=n; l=1; r=0; ans=0; q=0;
	RREP(i,n,1) {
		if(j>i) --j;
		if(s[j]==t[i]) continue;
		while(j&&s[j]!=t[i]) --j;
		if(!j) {puts("-1"); return 0;}
		--q; x[++r]=j-q; while(l<=r&&x[l]+q>=i) ++l;
		if(r-l>=ans) ans=r-l+1;
	} printf("%d\n",ans); return 0;
}	