//In functie de N stiu daca primul in sir este primul cuvant sau al doilea
//N - par : al doilea
//N - impar : primul
//Calculez lungimile posibile ale lui a si b
//si verific toate posibilitatile
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <string>
using namespace std;
class Pair
{
public:
int a, b;
string sir;
Pair( int a, int b, const char sir[] )
{
this->a = a;
this->b = b;
this->sir = sir;
}
};
class SPair
{
public:
string a, b;
SPair( string a, string b )
{
this->a = a;
this->b = b;
}
bool operator < ( const SPair p ) const
{
//if ( a.substr( 0, p.a.size() ) == p.a )
// return 1;
return strcmp( p.a, this->a ) > 0;
//return (this->a < p.a);
}
};
int main( int argc, char *argv[] )
{
int n, m;
FILE *fin = fopen( "lampa.in", "r" );
fscanf( fin, "%d %d", &n, &m );
Pair t1( 1, 0, "a" );
Pair t2( 0, 1, "b" );
Pair t3( 1, 1, "ab" );
for ( int i = 3; i < n; i++ )
{
t1.a = t2.a; t1.b = t2.b; t1.sir = t2.sir;
t2.a = t3.a; t2.b = t3.b; t2.sir = t3.sir;
t3.a = t1.a + t2.a;
t3.b = t1.b + t2.b;
t3.sir = t1.sir + t2.sir;
}
//fprintf( stdout, "%d %d %s\n", t3.a, t3.b, t3.sir.c_str() );
vector<Pair> vec;
vector<SPair> sol;
int max = 0;
for ( int i = 1; i < m/t3.a; i++ )
if ( (m - (t3.a*i)) % t3.b == 0 )
{
vec.push_back( Pair( i, (m-(t3.a*i)) / t3.b, t3.sir.c_str() ) );
int suma = 0;
for ( int j = 0; j < 3; j++ )
if ( t3.sir[j] == 'a' )
suma += i;
else
suma += (m - (t3.a*i)) / t3.b ;
if ( max < suma )
max = suma;
//fprintf( stdout, "%d %d | %d %d\n", i, (m-(t3.a*i)) / t3.b, suma, max );
}
char *sir = new char[max+2];
memset( sir, 0, max+2 );
fscanf( fin, "\n" );
fread( sir, sizeof( char ), max, fin );
//fprintf( stdout, "%s | %d\n", sir, strlen( sir ) );
for ( int i = 0; i < vec.size(); i++ )
{
if ( vec[i].sir[0] == 'a' && vec[i].sir[2] == 'a' )
{
if ( memcmp( sir, sir+vec[i].a+vec[i].b, vec[i].a ) )
continue;
}
else if ( vec[i].sir[0] == 'b' && vec[i].sir[2] == 'b' )
{
if ( memcmp( sir, sir+vec[i].a+vec[i].b, vec[i].b ) )
continue;
}
else if ( vec[i].sir[1] == 'a' && vec[i].sir[2] == 'a' )
{
if ( memcmp( sir+vec[i].b, sir+vec[i].b+vec[i].a, vec[i].a ) )
continue;
}
else if ( vec[i].sir[1] == 'b' && vec[i].sir[2] == 'b' )
{
if ( memcmp( sir+vec[i].a, sir+vec[i].a+vec[i].b, vec[i].b ) )
continue;
}
string el[3];
int nrvechi = 0;
for ( int j = 0; j < 2; j++ )
{
int nr = 0;
el[j] = "";
if ( vec[i].sir[j] == 'a' )
nr = vec[i].a;
else
nr = vec[i].b;
char ch = sir[nrvechi+nr];
sir[nrvechi+nr] = 0;
el[j] = sir+nrvechi;
sir[nrvechi+nr] = ch;
nrvechi += nr;
}
//fprintf( stdout, "%s %s %s\n", el[0].c_str(), el[1].c_str(), el[2].c_str() );
string a, b;
if ( vec[i].sir[0] == 'a' )
a = el[0];
else
b = el[0];
if ( vec[i].sir[1] == 'a' )
a = el[1];
else
b = el[1];
sol.push_back( SPair( a, b ) );
}
//if ( sol.size() == 12 )
// return 0;
sort( sol.begin(), sol.end() );
FILE *fout = fopen( "lampa.out", "w" );
if ( sol.size() == 0 )
fprintf( fout, "0\n" );
else
fprintf( fout, "%s\n%s\n", sol[0].a.c_str(), sol[0].b.c_str() );
fclose( fout );
return 0;
}