#include "combo.h"
#include <iostream>
#define DBG(a) cerr<<#a<<" = "<<(a)<<endl
#define SZ(v) (int)v.size()
using namespace std;
const string V = "ABXY";
std::string guess_sequence(int N) {
if(N == 1){
if(press("AAA")) return "A";
if(press("BBB")) return "B";
if(press("XXX")) return "X";
return "Y";
}
if(N == 2){
int x = press("ABBBBX");
if(x == 0){
if(press("YYYYYA") == 2) return "YA";
if(press("YYYYYB") == 2) return "YB";
return "YX";
} else if(x == 1){
if(press("XXXXXX") == 0){
if(press("XXAXAY") == 0){
if(press("BBBBBA") == 2) return "BA";
return "BY";
} else{
if(press("AAAAAX") == 2) return "AX";
return "AY";
}
} else{
if(press("XXXXXA") == 2) return "XA";
if(press("XXXXXB") == 2) return "XB";
return "XY";
}
} else if(x == 2){
if(press("AAAAAB") == 2) return "AB";
return "BX";
}
}
// caso general
char first = '-';
if(press("AB")){
if(press("A")) first = 'A';
else first = 'B';
} else{
if(press("X")) first = 'X';
else first = 'Y';
}
string s; s += first;
string v;
for(char c: V) if(c != first) v += c;
//~ DBG(s);
for(int i=1;i<N-1;++i){ // siempre tengo que tener dos espacios
string t = s + v[0];
for(int j=0;j<3;++j) t += s + v[1] + v[j];
int x = press(t) - SZ(s);
if(x == 0) s += v[2];
if(x == 1) s += v[0];
if(x == 2) s += v[1];
//~ DBG(s);
}
if(press(s+v[0]) - SZ(s)) s += v[0];
else if(press(s+v[1]) - SZ(s)) s += v[1];
else s+=v[2];
//~ DBG(s);
return s;
}
#ifdef LOCAL
#include "grader.cpp"
#endif