Pagini recente » Cod sursa (job #714298) | Cod sursa (job #450608) | Cod sursa (job #3261027) | Cod sursa (job #401592) | Cod sursa (job #564209)
Cod sursa(job #564209)
#include<stdio.h>
int n,m,f1[53],f2[53];
char s[3100006];
char a[50006],b[50005];
int egal(int st,int dr,int lv,int l1,int l2)
{
if(lv==1)
{
for(int i=1;i<=l1;i++)
if(a[i]!=s[st+i-1])
return 0;
return 1;
}
if(lv==2)
{
for(int i=1;i<=l2;i++)
if(b[i]!=s[st+i-1])
return 0;
return 1;
}
int L=f1[lv-2]*l1+f2[lv-2]*l2;
if(egal(st,st+L-1,lv-2,l1,l2)
&& egal(st+L,dr,lv-1,l1,l2))
return 1;
return 0;
}
int merge(int l1,int l2)
{
int i;
for(i=0;i<l1;i++)
a[i+1]=s[i];
for(i=l1;i<l1+l2;i++)
b[i-l1+1]=s[i];
if(!egal(0,m,n,l1,l2))
return 0;
for(i=1;i<=l1;i++)
printf("%c",a[i]);
printf("\n");
for(i=1;i<=l2;i++)
printf("%c",b[i]);
printf("\n");
return 1;
}
int main ()
{
int i,j,L;
freopen("lampa.in","r",stdin);
freopen("lampa.out","w",stdout);
scanf("%d%d\n",&n,&m);
fgets(s,sizeof(s),stdin);
f1[1]=1;f1[2]=0;
for(i=3;i<=n;i++)
f1[i]=f1[i-2]+f1[i-1];
f2[1]=0;f2[2]=1;
for(i=3;i<=n;i++)
f2[i]=f2[i-2]+f2[i-1];
for(i=1;i<=m;i++)
{
L=m-f1[n]*i;
if(L<=0)
break;
if(L%f2[n])
continue;
j=L/f2[n];
if(merge(i,j))
return 0;
}
printf("0\n");
return 0;
}