#P1970D3. Arithmancy (Hard)

Arithmancy (Hard)

No submission language available for this problem.

Description

The only difference between the versions of this problem is the maximum value of nn.

Professor Vector is preparing to teach her Arithmancy class. She needs to prepare nn distinct magic words for the class. Each magic word is a string consisting of characters X and O. A spell is a string created by concatenating two magic words together. The power of a spell is equal to the number of its different non-empty substrings. For example, the power of the spell XOXO is equal to 7, because it has 7 different substrings: X, O, XO, OX, XOX, OXO and XOXO.

Each student will create their own spell by concatenating two magic words. Since the students are not very good at magic yet, they will choose each of the two words independently and uniformly at random from the nn words provided by Professor Vector. It is therefore also possible that the two words a student chooses are the same. Each student will then compute the power of their spell, and tell it to Professor Vector. In order to check their work, and of course to impress the students, Professor Vector needs to find out which two magic words and in which order were concatenated by each student.

Your program needs to perform the role of Professor Vector: first, create nn distinct magic words, and then handle multiple requests where it is given the spell power and needs to determine the indices of the two magic words, in the correct order, that were used to create the corresponding spell.

Interaction

This is an interactive problem.

First, your program should read a single integer nn (1n10001 \le n \le 1000), the number of magic words to prepare. Then, it should print nn magic words it has created, one per line. The magic words must be distinct, each magic word must have at least 1 and at most 30n30\cdot n characters, and each character must be either X or O. We will denote the ii-th magic word you printed as wiw_i (1in1 \le i \le n).

Then, your program should read a single integer qq (1q10001 \le q \le 1000), the number of students in the class. Then, it should repeat the following process qq times, one per student.

For the jj-th student, it should first read a single integer pjp_j, the power of their spell. It is guaranteed that this number is computed by choosing two indices uju_j and vjv_j independently and uniformly at random between 1 and nn inclusive, concatenating wujw_{u_j} and wvjw_{v_j}, and finding the number of different non-empty substrings of the resulting string. Then, your program must print the numbers uju_j and vjv_j, in this order (1uj,vjn1 \le u_j, v_j \le n).

Note that it is not enough to find any two magic words that concatenate into a spell with the given power. You must find the exact words used by the student in the exact order.

Remember to flush the output stream after printing all magic words and after printing uju_j and vjv_j for each student.

Sample Input 1

2


2
15

11

Sample Output 1

XOXO
X


1 1

2 1