Dans la province de Plang, $n = 300$ étudiants ont participé à la Plang OI 2026. Parmi eux, certains ont remporté des médailles d'or et d'autres non.
Les étudiants de la province de Plang ont une habitude étrange. S'ils n'ont pas gagné de médaille d'or, ils diront honnêtement qu'ils n'en ont pas gagné. Cependant, s'ils en ont gagné, ils diront qu'ils en ont gagné avec une probabilité $p$, tandis que l'autre probabilité est qu'ils disent qu'ils n'en ont pas gagné. Notez que chaque réponse est aléatoire et n'a aucun lien avec la précédente.
Vous, en tant qu'entraîneur de la province de Plang, voulez savoir pour chaque étudiant s'il a remporté une médaille d'or. Ensuite, vous pouvez demander à Una d'effectuer les actions suivantes :
- Choisir des étudiants distincts et demander à Una de demander à chacun d'eux s'il a remporté la médaille d'or. Una vous indiquera le nombre de personnes qui ont répondu "Oui".
La ligne de médaille d'or de la Plang OI 2025 est de 571, vous devriez donc trouver la réponse en moyenne en moins de 568 requêtes.
En raison des limitations de la Plang OI, vous pouvez supposer qu'exactement 48 étudiants ont remporté une médaille d'or.
Picture 1: A coach asking a student how many points he has hidden.
Interaction
Ceci est un problème interactif. N'oubliez pas de vider le tampon de sortie après chaque impression. Pour vider votre sortie, vous pouvez utiliser :
fflush(stdout)oucout.flush()en C/C++;System.out.flush()en Java et Kotlin;sys.stdout.flush()en Python.
D'abord, vous devriez lire un entier $T$ ($T = 20$) indiquant le nombre de cas de test.
Pour chaque cas de test, vous devriez lire un entier $n$ ($n = 300$), indiquant le nombre d'étudiants.
Pour faire une requête, vous devriez imprimer une ligne formatée comme "? $k$ $P_1$ $P_2$ ... $P_k$" ($1 \le P_i \le n$, $P_i \ne P_j$ pour $1 < i < j \le k$).
Ensuite, lisez un entier indiquant la réponse trouvée par Una. Si votre requête est invalide, ou si vous effectuez plus de $568T$ requêtes au total, le programme jury imprimera -1. Après avoir lu -1, vous devriez quitter immédiatement pour éviter un comportement indéfini.
Si vous obtenez la réponse, vous devriez imprimer une ligne formatée comme "! $s_1$ $s_2$ ... $s_n$", où $s_i = 1$ indique que le $i$-ème étudiant a obtenu l'or, 0 sinon.
Ensuite, lisez un mot OK ou WA indiquant si votre réponse est correcte. Si votre programme lit WA, vous devriez quitter immédiatement pour éviter un comportement indéfini.
Notez que le jury n'est pas adaptatif, c'est-à-dire que la réponse ne changera pas après vos requêtes. Il y a au plus 10 tests.
Exemples
Entrée 1
1 2 0 0 1
Sortie 1
? 2 1 2 ? 1 1 ? 1 2 ! 0 1
Remarque
Notez que l'exemple est à titre de référence uniquement, il ne satisfait pas $T = 20$ et $n = 300$, et il n'apparaîtra pas dans les tests finaux.
Un outil de test est fourni pour aider les concurrents à développer et tester leurs solutions. Vous pouvez télécharger cet outil à partir des pièces jointes. L'exécution de l'outil avec l'option "-h" devrait décrire comment utiliser l'outil. L'outil de test n'implémentera que certains scénarios de test et seulement certaines fonctionnalités du programme de jury réel.