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
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

string s;
int n, t;
bitset<50001> odp;
map<int, char> numToChar = { { 0, 'P' }, { 1, 'K' }, { 2, 'N' } };
map<char, int> charToNum = { { 'P', 0 }, { 'K', 1 }, { 'N', 2 } };

char wyslij(char c)
{
  cout << c << '\n';
  cout.flush();
  cin >> c;
  return c;
}

int main()
{
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  cin >> s >> n >> t;
  for (int _ = 0; _ < t; _++)
  {
    cin >> s;
    s = s+'0';
    for (int i = 0; i < n; i+=3)
    {
      int curr = (s[i+0]-'0') + (s[i+1]-'0') * 2 + (s[i+2]-'0') * 4;
      char c1 = numToChar[curr % 3];
      char c2 = numToChar[curr / 3];
      c1 = wyslij(c1);
      wyslij(c1);
      c2 = wyslij(c2);
      wyslij(c2);
      curr = charToNum[c1] + charToNum[c2] * 3;
      odp[i+0] = (curr % 2) / 1;
      odp[i+1] = (curr % 4) / 2;
      odp[i+2] = (curr % 8) / 4;
    }
    cout << "! ";
    for (int i = 0; i < n; i++) cout << odp[i];
    cout << '\n';
    cout.flush();
  }

  return 0;
}