Codeforces Round 612 (Div. 2)
E2
Madhouse (Hard version)
Codeforces
未评级
原题
← E1F →
翻译中…

This problem is different with easy version only by constraints on total answers length

翻译中…

It is an interactive problem

翻译中…

Venya joined a tour to the madhouse, in which orderlies play with patients the following game. Orderlies pick a string $s$ of length $n$, consisting only of lowercase English letters. The player can ask two types of queries:

翻译中…
  • ? l r – ask to list all substrings of $s[l..r]$. Substrings will be returned in random order, and in every substring, all characters will be randomly shuffled.
  • ! s – guess the string picked by the orderlies. This query can be asked exactly once, after that the game will finish. If the string is guessed correctly, the player wins, otherwise he loses.
翻译中…

The player can ask no more than $3$ queries of the first type.

翻译中…

To make it easier for the orderlies, there is an additional limitation: the total number of returned substrings in all queries of the first type must not exceed $\left\lceil 0.777(n+1)^2 \right\rceil$ ($\lceil x \rceil$ is $x$ rounded up).

翻译中…

Venya asked you to write a program, which will guess the string by interacting with the orderlies' program and acting by the game's rules.

翻译中…

Your program should immediately terminate after guessing the string using a query of the second type. In case your program guessed the string incorrectly, or it violated the game rules, it will receive verdict Wrong answer.

翻译中…

Note that in every test case the string is fixed beforehand and will not change during the game, which means that the interactor is not adaptive.

翻译中…

Input

翻译中…

First line contains number $n$ ($1 \le n \le 100$) — the length of the picked string.

翻译中…

Interaction

翻译中…

You start the interaction by reading the number $n$.

翻译中…

To ask a query about a substring from $l$ to $r$ inclusively ($1 \le l \le r \le n$), you should output

翻译中…

? l r

翻译中…

on a separate line. After this, all substrings of $s[l..r]$ will be returned in random order, each substring exactly once. In every returned substring all characters will be randomly shuffled.

翻译中…

In the case, if you ask an incorrect query, ask more than $3$ queries of the first type or there will be more than $\left\lceil 0.777(n+1)^2 \right\rceil$ substrings returned in total, you will receive verdict Wrong answer.

翻译中…

To guess the string $s$, you should output

翻译中…

! s

翻译中…

on a separate line.

翻译中…

After printing each query, do not forget to flush the output. Otherwise, you will get Idleness limit exceeded. To flush the output, you can use:

翻译中…
  • fflush(stdout) or cout.flush() in C++;
  • System.out.flush() in Java;
  • flush(output) in Pascal;
  • stdout.flush() in Python;
  • see documentation for other languages.
翻译中…

If you received - (dash) as an answer to any query, you need to terminate your program with exit code 0 (for example, by calling exit(0)). This means that there was an error in the interaction protocol. If you don't terminate with exit code 0, you can receive any unsuccessful verdict.

翻译中…

Hack format

翻译中…

To hack a solution, use the following format:

翻译中…

The first line should contain one integer $n$ ($1 \le n \le 100$) — the length of the string, and the following line should contain the string $s$.

翻译中…

样例

Input #1
4

a
aa
a

cb
b
c

c
Output #1
? 1 2

? 3 4

? 4 4

! aabc
InputCopy OutputCopy
题目信息
题号
1287E2
时间限制
1 s
内存限制
256 MB

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。