## https://yukicoder.me/problems/no/2030 H = 9999999999999937 B = 30 def solve(X, Y): if len(X) == len(Y): for i in range(len(X)): if X[i] != Y[i]: if X[i] < Y[i]: return "Y" else: return "X" else: reverse = False # len(X) < len(Y)として問題を解きたい if len(X) > len(Y): X, Y = Y, X reverse = True # ローリングハッシュ pow_b = [0] * (len(Y) + 1) b = 1 for i in range(len(Y) + 1): pow_b[i] = b b *= B b %= H hash_x = 0 for x in X: hash_x *= B hash_x %= H hash_x += ord(x) - ord("a") + 1 hash_x %= H array = [0] * (2 * len(Y)) hash_y = 0 for i in range(2 * len(Y)): hash_y *= B hash_y %= H hash_y += ord(Y[i % len(Y)]) - ord("a") + 1 hash_y %= H array[i] = hash_y index = 0 passed = [False] * len(Y) target = -1 while not passed[index % len(Y)]: passed[index % len(Y)] = True ind = index % len(Y) hash_y = array[ind + len(X) - 1] if ind == 0 else (array[ind + len(X) - 1] - ((array[ind - 1] * pow_b[len(X)]) % H)) % H if hash_x != hash_y: target = index break index += len(X) if target == -1: ans = "Y" else: ind = target % len(Y) for i in range(len(X)): if X[i] > Y[(i + ind) % len(Y)]: ans = "X" break elif X[i] < Y[(i + ind) % len(Y)]: ans = "Y" break if reverse: if ans == "X": return "Y" else: return "X" else: return ans def main(): T = int(input()) answers = [] for _ in range(T): X = input() Y = input() ans = solve(X, Y) answers.append(ans) for ans in answers: print(ans) if __name__ == '__main__': main()