#include using namespace std; using ll=long long; const ll ILL=2167167167167167167; const int INF=2100000000; #define rep(i,a,b) for (int i=(int)(a);i<(int)(b);i++) #define all(p) p.begin(),p.end() template using pq_ = priority_queue, greater>; template int LB(vector &v,T a){return lower_bound(v.begin(),v.end(),a)-v.begin();} template int UB(vector &v,T a){return upper_bound(v.begin(),v.end(),a)-v.begin();} template bool chmin(T &a,T b){if(b bool chmax(T &a,T b){if(a void So(vector &v) {sort(v.begin(),v.end());} template void Sore(vector &v) {sort(v.begin(),v.end(),[](T x,T y){return x>y;});} bool yneos(bool a,bool upp=false){if(a){cout<<(upp?"YES\n":"Yes\n");}else{cout<<(upp?"NO\n":"No\n");}return a;} template void vec_out(vector &p,int ty=0){ if(ty==2){cout<<'{';for(int i=0;i<(int)p.size();i++){if(i){cout<<",";}cout<<'"'< T vec_min(vector &a){assert(!a.empty());T ans=a[0];for(auto &x:a) chmin(ans,x);return ans;} template T vec_max(vector &a){assert(!a.empty());T ans=a[0];for(auto &x:a) chmax(ans,x);return ans;} template T vec_sum(vector &a){T ans=T(0);for(auto &x:a) ans+=x;return ans;} int pop_count(long long a){int res=0;while(a){res+=(int)(a&1),a>>=1;}return res;} template T square(T a){return a * a;} void solve(); // DEAR MYSTERIES / TOMOO int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // cin >> t; rep(i, 0, t) solve(); } void solve(){ string S; cin >> S; int Q; cin >> Q; int N, M; cin >> N >> M; int L = N; if (S[0] == 'B') L = M; vector> X(L); rep(i, 0, L) cin >> X[i].first, X[i].second = i + 1; So(X); auto sh = [&](int ind) -> int { cout << "share " << ind<< endl; int res; cin >> res; return res; }; auto ans = [&](int val) -> void { cout << "answer " << val << endl; }; // 0-index int z = (N + M) / 2; // z 番目が欲しいとき、 // z = 0, M + N - 1 なら極値を比較 // そうでないとき // 足して z + 1 になるようなものを選んで、 while (true) { if (X.empty()) { ans(sh(1)); return; } if (N + M == L) { sh(X[z].second); ans(X[z].first); return; } if (z == 0) { ans(min(X[z].first, sh(X[z].second))); return; } if (z == N + M - 1) { ans(max(X.back().first, sh(X.back().second))); return; } int s = 0; int val = INF; rep(i, 0, N) { int t = z - i; if (t < 0 || M <= t) continue; int tmp = -1; chmax(tmp, i + M - t); chmax(tmp, t + N - i); if (chmin(val, tmp)) { s = i; } } int t = z - s; int a, b; if (S[0] == 'A') { a = X[s].first; b = sh(X[s].second); } else { b = X[t].first; a = sh(X[t].second); } vector> Y; // alice 側はa 以上を残す // bob 側は b より小さいものを残す if (a < b) { if (S[0] == 'A') { rep(i, s, N) Y.push_back(X[i]); } else { rep(i, 0, t) Y.push_back(X[i]); } N -= s; M = t; z -= s; } // 逆 else { if (S[0] == 'A') { rep(i, 0, s) Y.push_back(X[i]); } else { rep(i, t, M) Y.push_back(X[i]); } N = s; M -= t; z -= t; } swap(X, Y); L = X.size(); } }