#include using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); string S; cin >> S; assert(S == "Alice" || S == "Bob"); int N, Q; cin >> N >> Q; assert(1 <= N && N <= 14); assert(Q == 380 || Q == 410 || Q == 420); assert(Q == 410); vector F(20, 1); for (int i = 1; i < 20; i++) F[i] = F[i - 1] * i; if (S == "Alice") { vector A(N); for (int i = 0; i < N; i++) cin >> A[i]; assert(1 <= A[0]); for (int i = 0; i < N - 1; i++) { assert(A[i] < A[i + 1]); } assert(A.back() <= 1'000'000'000); vector T(N); for (int i = 0; i < min(N, 13); i++) { A[i]++; while (A[i] > 1) { T[i] += (char)('0' + (A[i] & 1)); A[i] >>= 1; } } if (N < 14) { cout << N << endl; for (int i = 0; i < N; i++) cout << T[i] << endl; return 0; } A[N - 1]--; vector S(N - 1); for (int i = 0; i < N - 1; i++) { S[i] = T[A[N - 1] / F[N - 2 - i]]; T.erase(T.begin() + A[N - 1] / F[N - 2 - i]); A[N - 1] %= F[N - 2 - i]; } cout << N - 1 << endl; for (auto s : S) cout << s << endl; } else { int K; cin >> K; assert(1 <= K && K <= N); vector S(K); for (int i = 0; i < K; i++) { cin >> S[i]; Q -= S[i].size(); for (auto c : S[i]) { assert(c == '0' || c == '1'); } } assert(Q >= 0); vector B(N); for (int i = 0; i < K; i++) { S[i] += '1'; reverse(S[i].begin(), S[i].end()); for (auto c : S[i]) B[i] = 2 * B[i] + c - '0'; B[i]--; } if (N < 14) { assert(K == N); for (int i = 0; i < N; i++) cout << B[i] << " \n"[i == N - 1]; return 0; } B[N - 1] = 1; for (int i = 0; i < N - 1; i++) { for (int j = i + 1; j < N - 1; j++) { if (B[i] > B[j]) { B[N - 1] += F[N - 2 - i]; } } } sort(B.begin(), B.end()); for (int i = 0; i < N; i++) cout << B[i] << " \n"[i == N - 1]; } return 0; }