#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#include <ext/rope>
using namespace __gnu_pbds;
using namespace std;
#define pb push_back
#define rep(i,x,y) for(register int i=x;i<=y;i++)
#define rep1(i,x,y) for(register int i=x;i>=y;--i)
#define fire signed
#define il inline
template<class T> il void print(T x) {
if(x<0) printf("-"),x=-x;
if (x > 9) print(x / 10);
putchar(x % 10 + '0');
}
#define ull unsigned long long
int T=1;
const int N=1e5+10;
const int M=32;
int f[M][M+M];
int k;
string s,t;
const int ba=131;
ull ha[N],ha1[N],jc[N];
int n,m;
gp_hash_table<int,int>mp[N];
int lcp(int x,int y) {
if(mp[x].count(y)) {
return mp[x][y];
}
int l=0,r=min(n-x+1,m-y+1),res=0;
while(l<=r) {
int mid=l+r>>1;
if(ha[x+mid-1]-ha[x-1]*jc[mid]==ha1[y+mid-1]-ha1[y-1]*jc[mid]) l=mid+1,res=mid;
else r=mid-1;
}
mp[x][y]=res;
return res;
}
int ans[N];
fire main() {
cin.tie(nullptr)->sync_with_stdio(false);
jc[0]=1;
cin>>k;
cin>>s;
cin>>t;
s=" "+s;
t=" "+t;
n=s.size()-1;
m=t.size()-1;
rep(i,1,max(n,m)) jc[i]=jc[i-1]*ba;
rep(i,1,n) ha[i]=ha[i-1]*ba+s[i]-'a'+1;
rep(i,1,m) ha1[i]=ha1[i-1]*ba+t[i]-'a'+1;
rep(le,1,m) {
memset(f,0,sizeof f);
f[0][M]=lcp(1,le);
rep(nowk,0,k) {
rep(l,-nowk,nowk) {
int len1=f[nowk][l+M],len2=len1+l+le-1;
f[nowk+1][l+M]=max(f[nowk+1][l+M],f[nowk][l+M]+lcp(len1+2,len2+2)+1);
f[nowk+1][l+M-1]=max(f[nowk+1][l+M-1],f[nowk][l+M]+lcp(len1+2,len2+1)+1);
f[nowk+1][l+M+1]=max(f[nowk+1][l+M+1],f[nowk][l+M]+lcp(len1+1,len2+2));
}
}
rep(l,max(1-n,-k),min(k,m-le+1-n)) {
rep(nowk,0,k) {
if(f[nowk][l+M]>=n) {
ans[nowk]++;
break;
}
}
}
}
rep(i,0,k) {
// ans[i]+=ans[i-1];
printf("%d\n",ans[i]);
}
return false;
}