#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <set>

using namespace std;

const int NMAX = 100000;

char s1[NMAX+1], s2[NMAX+1];

int n;

//случайные строки
void tests_5_6(int r) {
  srand(r);
  n = NMAX;
  for(int i=0; i<n; i++) s1[i]='a'+rand()%2;
  s1[n]=0;
  int k = (rand()*rand()) % n;
  strcpy(s2,s1+k);
  int l2 = strlen(s2);
  char *c = s2+l2;
  while (l2<n) {
    *c = 'a' + rand()%2;
    c++; l2++;
  }
  *c=0;
  cout << s1 << endl;
  cout << s2 << endl;
}

//в основном повторяется один символ
void tests_7(int r) {
  srand(r);
  n = NMAX;
  for(int i=0; i<n; i++) s1[i]='a'+((rand()%10000==0)?1:0);
  s1[n]=0;
  int k = (rand()*rand()) % n;
  strcpy(s2,s1+k);
  int l2 = strlen(s2);
  char *c = s2+l2;
  while (l2<n) {
    *c = 'a' + ((rand()%5000==0)?1:0);
    c++; l2++;
  }
  *c=0;
  cout << s1 << endl;
  cout << s2 << endl;
}


//периодически повторяющаяся последовательность c небольшими нарушениями
void tests_8(int r) {
  srand(r);
  n = NMAX-5;
  int i;
  for(i=0; i<n;) {
    s1[i++]='a';
    if (rand() % 20000 == 0) s1[i++]='a'; else s1[i++]='b';
  }
  s1[i]=0;
  n=i;

  int k = (rand()*rand()) % n;
  strcpy(s2,s1+k);
  int l2 = strlen(s2);
  char *c = s2+l2;
  while (l2<n) {
    *c = 'a';
    c++; l2++;
    if (l2==n) break;
    if (rand() % 20000 == 0) *c='a'; else *c='b';
    c++; l2++;
  }

  *c=0;
  cout << s1 << endl;
  cout << s2 << endl;
}



int main (int argc, char *argv[]) {
  if (argc==0) return 1;
  int testnum = atoi(argv[1]);
  switch (testnum) {
    case 5: tests_5_6(5555); break;
    case 6: tests_5_6(6666); break;
    case 7: tests_7(7777); break;
    case 8: tests_8(8888); break;
  };
  return 0;
}
