#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); string String() { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0); return _input[_iter++]; } T I() where T : IParsable => T.Parse(String(), null); #endregion var max = (1L << 60) + 2; var powers = new (long, long)[124]; powers[0] = (1, 0); for (var i = 0; i < 123; i++) { var (a, b) = powers[i]; powers[i + 1] = (Math.Min(max, a * 2), Math.Min(max, a * 4 + b)); } var n = I(); var q = I(); var s = String(); var queries = new (long, long, long, int)[q]; for (var i = 0; i < q; i++) { var ti = I(); var xi = I() - 1; queries[i] = (Math.Min(ti, 60), xi, ti, i); } Array.Sort(queries); var ans = new char[q]; var j = 0; var (mt, x, t, k) = queries[j]; char SolveW(long t, long x) { if (t > 123) return SolveW(t % 60 + 60, x); if (t == 0) return 'w'; var (a, b) = powers[t - 1]; var s = a + b; if (x < s) return SolveW(t - 1, x); x -= s; if (x < s) return SolveA(t - 1, x); x -= s; if (x >= 4) { while (true) { } } return "rong"[(int)x]; } char SolveA(long t, long x) { if (t > 123) return SolveA(t % 60 + 60, x); if (t == 0) return 'a'; var (a, b) = powers[t - 1]; var s = a + b; if (x < s) return SolveA(t - 1, x); x -= s; if (x == 0) return 'n'; if (x == 1) return 's'; x -= 2; if (x < s) return SolveW(t - 1, x); x -= s; if (x >= 2) { while (true) { } } return "er"[(int)x]; } for (var tl = 1; tl <= 60; tl++) { var ci = 0L; foreach (var c in s) { if (j == q) break; while (mt == tl && ci == x) { ans[k] = c; j++; if (j == q) break; (mt, x, t, k) = queries[j]; } if (c == 'w' || c == 'a') { var (a, b) = powers[tl]; var r = ci + a + b; r = Math.Min(max, r); while (mt == tl && x < r) { ans[k] = c == 'w' ? SolveW(t, x - ci) : SolveA(t, x - ci); j++; if (j == q) break; (mt, x, t, k) = queries[j]; } ci = r; } else ci++; } } Console.WriteLine(new string(ans));