#include <bits/stdc++.h>
using namespace std;
vector<bool> rnd{0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1};
// vector<bool> rnd(5000);
map<char, string> M{
{'P', "0"},
{'K', "10"},
{'N', "11"},
};
string rand_xor(const string& msg) {
string res;
for (int i = 0; i < (int)msg.size(); ++i) {
if (rnd[i]) {
res += (msg[i] == '0' ? '1' : '0');
}
else {
res += msg[i];
}
}
return res;
}
char exchange(char my) {
cout << my << endl;
char resp;
cin >> resp;
return resp;
}
void algosia(const string& msg) {
string ans;
for (int i = 0; i < (int)msg.size(); ++i) {
if (i + 1 == (int)msg.size()) {
char my0 = (msg[i] == '0' ? 'P' : 'K');
char resp0 = exchange(my0);
ans += (resp0 == 'P' ? '0' : '1');
continue;
}
char my0 = 'P';
if (msg.substr(i, 2) == "10") {
my0 = 'K';
}
else if (msg.substr(i, 2) == "11") {
my0 = 'N';
}
char resp0 = exchange(my0);
ans += M[resp0];
if (my0 == 'P' && resp0 == 'P') {
continue;
}
if (my0 != 'P' && resp0 != 'P') {
if (my0 != resp0) {
exchange(resp0);
}
++i;
continue;
}
++i;
if (my0 == 'K') {
char resp1 = exchange('P');
if (resp1 == 'P') {
ans += '0';
exchange(resp0);
}
else {
ans += '1';
}
}
else if (my0 == 'N') {
char resp1 = exchange('K');
if (resp1 == 'P') {
ans += '0';
}
else {
ans += '1';
exchange(resp0);
}
}
else {
char my1 = (msg[i] == '0' ? 'P' : 'K');
char resp1 = exchange(my1);
if (my1 == resp1) {
exchange(resp0);
}
}
}
ans = rand_xor(ans);
cout << "! " << ans << endl;
}
void bajtek(const auto& msg) {
algosia(msg);
}
int main() {
ios_base::sync_with_stdio(false);
string player;
cin >> player;
int n,t;
cin >> n >> t;
while (t--) {
string msg;
cin >> msg;
msg = rand_xor(msg);
if (player == "Algosia") {
algosia(msg);
}
else {
bajtek(msg);
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | #include <bits/stdc++.h> using namespace std; vector<bool> rnd{0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,1,0,1,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,0,0,0,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,1,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,1,1,0,0,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,0,1,0,0,0,1,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,0,0,0,1,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,0,0,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0,1,0,1,1,0,1,1,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,1,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,1,1,0,1,0,1,1,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,0,1,0,1,1,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1,1,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1}; // vector<bool> rnd(5000); map<char, string> M{ {'P', "0"}, {'K', "10"}, {'N', "11"}, }; string rand_xor(const string& msg) { string res; for (int i = 0; i < (int)msg.size(); ++i) { if (rnd[i]) { res += (msg[i] == '0' ? '1' : '0'); } else { res += msg[i]; } } return res; } char exchange(char my) { cout << my << endl; char resp; cin >> resp; return resp; } void algosia(const string& msg) { string ans; for (int i = 0; i < (int)msg.size(); ++i) { if (i + 1 == (int)msg.size()) { char my0 = (msg[i] == '0' ? 'P' : 'K'); char resp0 = exchange(my0); ans += (resp0 == 'P' ? '0' : '1'); continue; } char my0 = 'P'; if (msg.substr(i, 2) == "10") { my0 = 'K'; } else if (msg.substr(i, 2) == "11") { my0 = 'N'; } char resp0 = exchange(my0); ans += M[resp0]; if (my0 == 'P' && resp0 == 'P') { continue; } if (my0 != 'P' && resp0 != 'P') { if (my0 != resp0) { exchange(resp0); } ++i; continue; } ++i; if (my0 == 'K') { char resp1 = exchange('P'); if (resp1 == 'P') { ans += '0'; exchange(resp0); } else { ans += '1'; } } else if (my0 == 'N') { char resp1 = exchange('K'); if (resp1 == 'P') { ans += '0'; } else { ans += '1'; exchange(resp0); } } else { char my1 = (msg[i] == '0' ? 'P' : 'K'); char resp1 = exchange(my1); if (my1 == resp1) { exchange(resp0); } } } ans = rand_xor(ans); cout << "! " << ans << endl; } void bajtek(const auto& msg) { algosia(msg); } int main() { ios_base::sync_with_stdio(false); string player; cin >> player; int n,t; cin >> n >> t; while (t--) { string msg; cin >> msg; msg = rand_xor(msg); if (player == "Algosia") { algosia(msg); } else { bajtek(msg); } } return 0; } |
English