#include <bits/stdc++.h>
using namespace std;
const int mod = (int)1e9 + 7, maxn = 100005, ln = 17, maxm = 5005;
inline void S(int& n) {
  n = 0;
  int ch = getchar();
  int sign = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') sign = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    n = (n << 3) + (n << 1) + ch - '0', ch = getchar();
  }
  n = n * sign;
}
const int shift = 30, etf = mod - 1, LIM = (int)1e9;
const long long int inf = (long long int)1e18 + 1;
const double PI = (double)3.141592653589793238, EPSILON = 1e-10;
string base =
    "What are you doing at the end of the world? Are you busy? Will you save "
    "us?";
string part1 = "What are you doing while sending \"",
       part2 = "\"? Are you busy? Will you send \"", part3 = "\"?";
vector<long long int> sizes;
void pre() {
  long long int bsz = base.length();
  long long int nsz = part1.length() + part2.length() + part3.length();
  sizes.push_back(bsz);
  for (int i = 1; i < maxn; i++) {
    long long int ex = 2 * sizes[i - 1];
    if (ex + nsz >= inf) {
      sizes.push_back(inf);
    } else {
      sizes.push_back(ex + nsz);
    }
  }
}
char recurse(int n, long long int k) {
  if (k > sizes[n]) return '.';
  if (n == 0) {
    return base[k - 1];
  }
  long long int sz1 = part1.length();
  if (k <= sz1) {
    return part1[k - 1];
  }
  long long int sz2 = part2.length();
  long long int len = sizes[n - 1];
  if (k <= sz1 + len) return recurse(n - 1, k - sz1);
  if (k > sz1 + len && k <= sz1 + len + sz2) return part2[k - (sz1 + len) - 1];
  long long int clen = sizes[n];
  long long int sz3 = part3.length();
  if (k <= clen - sz3) return recurse(n - 1, k - (sz1 + len + sz2));
  return part3[k - (clen - sz3) - 1];
}
int main() {
  pre();
  int q;
  cin >> q;
  while (q--) {
    int n;
    long long int k;
    cin >> n >> k;
    printf("%c", recurse(n, k));
  }
  return 0;
}
