Pagini recente » Cod sursa (job #1182340) | Cod sursa (job #2127344) | Cod sursa (job #1928090) | Cod sursa (job #327664) | Cod sursa (job #2091853)
#include <bits/stdc++.h>
#define in "lampa.in"
#define out "lampa.out"
using namespace std;
int N, M;
deque < pair < int, int > > psbl;
char S[3027200], ord[2][100000];
int main()
{
assert(freopen(in, "r", stdin));
assert(freopen(out,"w", stdout));
assert(scanf("%d%d%s", &N, &M, S));
ord[1][0] = 'a', ord[0][0] = 'b';
int a = 0, b = 1, c = 1;
for(int i = 3, poz = i&1; i <= N; ++i, poz = 1-poz)
{
a = b, b = c, c = a + b;
strcat(ord[poz], ord[1-poz]);
}
int Acf = a, Bcf = b;
if(N&1)
for(int i = 1; i*Acf <= M; ++i)
if((M-Acf*i) % Bcf == 0)
psbl.push_back(make_pair(i, (M-Acf*i)/Bcf));
else
for(int i = 1; i*Bcf <= M; ++i)
if((M-Bcf*i) % Acf == 0)
psbl.push_back(make_pair(i, (M-Bcf*i)/Acf));
while(!psbl.empty())
{
int asize = psbl.front().first,
bsize = psbl.front().second,
stick = 0;
psbl.pop_front();
bool ok = 1;
if(N&1)
{
for(int i = 0; i < Acf+Bcf; ++i)
{
if(ord[N&1][i] == 'a')
{
for(int j = 0; j < asize; ++j)
if(S[stick+j] != S[j])
{ ok = 0; break; }
stick += asize;
}
else
{
for(int j = 0; j < bsize; ++j)
if(S[stick+j] != S[asize+j])
{ ok = 0; break; }
stick += bsize;
}
}
if(ok)
{
for(int i = 0; i < asize; ++i)
assert(printf("%c", S[i]));
assert(printf("\n"));
for(int i = asize; i < asize+bsize; ++i)
assert(printf("%c", S[i]));
return 0;
}
}
else
{
for(int i = 0; i < Acf+Bcf && ok; ++i)
{
if(ord[N&1][i] == 'b')
{
for(int j = 0; j < bsize; ++j)
if(S[stick+j] != S[j])
{ ok = 0; break; }
stick += bsize;
}
else
{
for(int j = 0; j < asize; ++j)
if(S[stick+j] != S[bsize+j])
{ ok = 0; break; }
stick += asize;
}
}
if(ok)
{
for(int i = 0; i < bsize; ++i)
assert(printf("%c", S[i]));
assert(printf("\n"));
for(int i = bsize; i < asize+bsize; ++i)
assert(printf("%c", S[i]));
return 0;
}
}
}
assert(printf("0\n"));
fclose(stdin), fclose(stdout);
return 0;
}