#include #include using namespace std; using i32 = int; using i64 = long long; using i128 = __int128_t; using p2 = pair; using el = tuple; using f64 = long double; using mint = atcoder::modint998244353; void _main(); int main() { ios::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(18); _main(); } i64 pow(i64 a, i64 n) { i64 res = 1; i64 x = a; while (n > 0) { if (n & 1) res *= x; x *= x; n >>= 1; } return res; } void _main() { i64 n, q; cin >> n >> q; string S; cin >> S; vector cnt(n + 1, 0); for (i64 i = 0; i < n; i++) { cnt[i + 1] = cnt[i]; if (S[i] == 'a' || S[i] == 'w') cnt[i + 1]++; } vector dp(61, 0); dp[0] = 1; for (i64 i = 1; i < dp.size(); i++) { dp[i] = dp[i - 1] + (5ll << (i - 1)); } map mpn; mpn['a'] = "answer"; mpn['w'] = "warong"; for (;q--;) { i64 t, x; cin >> t >> x; i64 l = 0, r = n; x--; while (r - l > 1) { i64 mid = (l + r) / 2; i64 d = mid - cnt[mid]; if (cnt[mid] == 0) { if (mid <= x) l = mid; else r = mid; continue; } if (t >= dp.size()) { r = mid; continue; } i128 left = d + cnt[mid] * dp[t]; if (left <= i128(x)) l = mid; else r = mid; } { i64 d = l - cnt[l]; i64 left = d; if (cnt[l] > 0) left += cnt[l] * dp[t]; x -= left; } char now = S[l]; if (now == 'a' || now == 'w') { t = min(t, (i64)dp.size() - 1); } while (true) { if (x == 0) { cout << now; break; } assert(mpn.count(now)); assert(t >= 1); string s = mpn[now]; t--; vector cnt(s.size() + 1, 0); for (i64 i = 0; i < s.size(); i++) { cnt[i + 1] = cnt[i]; if (s[i] == 'a' || s[i] == 'w') cnt[i + 1]++; } i64 idx = 0; while (idx < s.size()) { if (x == 0) break; if (s[idx] != 'a' && s[idx] != 'w') { x--; idx++; continue; } if (t >= dp.size() || x < dp[t]) { break; } x -= dp[t]; idx++; } now = s[idx]; } } cout << "\n"; }