#include <stdio.h>
#include <string.h>
#define Nmax 3030000
#define Lmax 320000
char S[Nmax]; // sirul initial
char f2[Lmax]; // sirul cum trebuie ca arate gen abbab
char A[Lmax/2],B[Lmax/2]; // cuvintele initiale
long pia[Lmax/2],pib[Lmax/2];
long n,m,i,lga,lgb,MA,MB,na,ns,poz;
long fn1,fn2;
int ok;
void fa_prefix(long pi[Lmax/2],char A[Lmax/2]){
na=strlen(A);
long k=-1,x;
pi[0]=0;
for(x=1;x<na;++x){
while(k>0 && A[k+1]!=A[x])
k=pi[k];
if(A[k+1]==A[x])
k++;
pi[x]=k;
}
}
long potrivire_kmp(long VAL,long pi[Lmax/2],char A[Lmax/2]){
long x=-1;
ns=strlen(S);
na=strlen(A);
for(i=VAL;i<ns;++i){
while(x>0 && A[x+1]!=S[i])
x=pi[x];
if(A[x+1]==S[i])
x++;
if(x==na-1)
// if(i-na+1>=poz)
return i-na+1;
// else x=pi[x];
}
return -1;
}
void fa_fib(){
long f0,f1,f2,nr;
for(f0=f1=1, nr=2; nr<n-1; f2=f0+f1, f0=f1,f1=f2,++nr);
fn1=f1; fn2=f0;
}
void fa_sirAB(long n){
char f0[120000],f1[120000];
long nr;
f0[0]='a'; f1[0]='b'; nr=2;
while(nr<n){
strcpy(f2,f0);
strcat(f2,f1);
strcpy(f0,f1);
strcpy(f1,f2);
nr++;
}
}
int vezi(long lga,long lgb){
long i,z;
memset(A,'\0',MA);
memset(B,'\0',MB);
if(n%2==1){ // incepe cu a
strncpy(A,S,lga);
for(i=lga;i<=lga+lgb-1;++i)
B[i-lga]=S[i];
}
else{ // incepe cu b
strncpy(B,S,lgb);
for(i=lgb;i<=lga+lgb-1;++i)
A[i-lgb]=S[i];
}
fa_prefix(pia,A);
fa_prefix(pib,B);
long x; ok=1;
poz=0;
for(i=0,z=strlen(f2);i<z && ok;++i){
if(f2[i]=='a'){
x=potrivire_kmp(poz,pia,A);
if(x!=poz) ok=0;
poz=poz+lga;
}
else{
x=potrivire_kmp(poz,pib,B);
if(x!=poz) ok=0;
poz=poz+lgb;
}
}
return ok;
}
int main(){
freopen("lampa.in","r",stdin);
freopen("lampa.out","w",stdout);
scanf("%ld%ld",&n,&m);
scanf("%s",&S);
fa_fib();
fa_sirAB(n);
MA=sizeof(A); if(m/fn2 < MA) MA=m/fn2;
MB=sizeof(B); if(m/fn1 < MB) MB=m/fn1;
lga=1; ok=0;
while(lga * fn2 <m && !ok){
if( (m-lga*fn2)%fn1==0 ){
lgb=(m-lga*fn2)/fn1;
ok=vezi(lga,lgb);
}
lga++;
}
if(ok){ printf("%s\n",A); printf("%s\n",B); }
else printf("0\n");
fclose(stdin); fclose(stdout);
return 0;
}