Pagini recente » Cod sursa (job #1325921) | Cod sursa (job #1823532) | Cod sursa (job #2902630) | Cod sursa (job #1762723) | Cod sursa (job #217285)
Cod sursa(job #217285)
#include <cstdio>
#include <string>
using namespace std;
#define MAX_N 20
#define MAX_M 3028000
int N;
long M, fib[MAX_N];
char buf[MAX_M];
string S, R;
string A, B;
void gen_fib()
{
fib[1] = fib[2] = 1;
for(int i = 3; i <= N; ++i)
fib[i] = fib[i - 1] + fib[i - 2];
}
int ver(int a, int b, bool k)
{
char aux[MAX_M];
string aux1, aux2;
for(int i = 0; i < a; ++i)
aux[i] = buf[i];
aux[a] = 0;
if(k)
aux1 = A = string(aux);
else
aux2 = A = string(aux);
for(int i = a; i < a+b; ++i)
aux[i - a] = buf[i];
aux[b] = 0;
if(k)
aux2 = B = string(aux);
else
aux1 = B = string(aux);
aux[0] = 0;
R = string(aux);
for(int i = 3; i <= N; ++i)
{
R = aux1 + aux2;
aux1 = aux2;
aux2 = R;
}
if(R == S)
return 1;
return 0;
}
void solve()
{
int x, y, t1 = fib[N - 2], t2 = fib[N - 1];
for(x = 1; x <= M; ++x)
{
y = (M - x*t1) / t2;
if((x*t1 + y*t2) == M)
if(N & 1)
{
if(ver(x, y, 1))
{
printf("%s\n%s",A.c_str(), B.c_str());
return;
}
}
else
if(ver(y, x, 0))
{
printf("%s\n%s",B.c_str(), A.c_str());
return;
}
}
printf("0\n");
}
int main()
{
freopen("lampa.in","rt",stdin);
freopen("lampa.out","wt",stdout);
scanf("%d %ld\n",&N, &M);
gen_fib();
fgets(buf, sizeof(buf), stdin);
if(buf[strlen(buf) - 1] == '\n')
buf[strlen(buf) - 1] = 0;
S = string(buf);
solve();
}