import std; void main () { int N, K; readln.read(N, K); // Nが大きい場合、先頭は全部Aで、関係する部分は長さ20程度しか無い。 int bit (int S, int i) { return 0 < (S & (1 << i)) ? 1 : 0; } const int M = min(20, N); int count = 0; string ans; foreach (S; 0 .. 1 << M) { foreach (i; 0 .. M - 2) { // 110という並びがあればよい。 if (bit(S, i) == 0 && bit(S, i + 1) == 1 && bit(S, i + 2) == 1) { count++; break; } } if (count == K) { foreach (i; 0 .. N - M) { ans ~= "A"; } foreach_reverse (i; 0 .. M) { ans ~= bit(S, i) == 0 ? "A" : "M"; } break; } } writeln(ans); } void read (T...) (string S, ref T args) { import std.conv : to; import std.array : split; auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } }