Existe un grafo simple no dirigido con $n$ vértices. Este grafo tiene una propiedad adicional:
- Cualquier subgrafo inducido contiene un vértice con un grado de a lo sumo $k$.
Debes encontrar este grafo oculto. Puedes verificar para cualquier subconjunto si es un conjunto independiente. Si no lo es, te mostraremos una arista con ambos extremos dentro de este conjunto.
No cambiaremos el grafo durante la interacción, por lo que puedes asumir que es fijo. Sin embargo, podemos elegir cualquier arista dentro del subgrafo inducido para mostrarla. En otras palabras, en todas las pruebas, el grafo es fijo, pero el interactor es adaptativo.
Debes adivinar el grafo en un máximo de $2nk + n$ consultas.
Interacción
La interacción comienza con una línea que contiene un entero $n$: el número de vértices en el grafo oculto ($2 \le n \le 2000$).
El entero $k$ no se proporciona, pero satisface la restricción $1 \le k < n$, $nk \le 2000$.
Después de esto, puedes realizar consultas.
Para realizar una consulta, imprime una línea que contenga "? $k$" ($1 \le k \le n$) y luego $k$ enteros distintos $v_1, v_2, \dots, v_k$ ($1 \le v_i \le n$). Separa los enteros consecutivos con espacios simples. Luego, limpia (flush) la salida.
Después de cada consulta, lee una línea con dos enteros $i, j$. Si no hay aristas en el subgrafo inducido por $v_1, v_2, \dots, v_k$, entonces $i = j = -1$; de lo contrario, $i \neq j$, $i \in \{v_1, \dots, v_k\}$, $j \in \{v_1, \dots, v_k\}$, y existe una arista con extremos $i$ y $j$ en el grafo.
Cuando encuentres el grafo, imprime en la primera línea "! $m$". Las siguientes $m$ líneas deben contener la descripción de las aristas del grafo, cada una de las cuales debe contener dos enteros $u, v$ ($1 \le u, v \le n$), que denotan los índices de los vértices conectados por una arista.
Tu solución obtendrá Wrong Answer o Time Limit Exceeded si realizas más de $2nk + n$ consultas.
Tu solución obtendrá Idleness Limit Exceeded si no imprimes nada o si olvidas limpiar la salida.
Para limpiar la salida, debes hacer lo siguiente inmediatamente después de imprimir una consulta y un salto de línea:
fflush(stdout)ocout.flush()en C++;System.out.flush()en Java;flush(output)en Pascal;stdout.flush()en Python;- consulta la documentación para otros lenguajes.
Ejemplos
Entrada 1
3 1 2 2 3 -1 -1
Salida 1
? 2 1 2 ? 2 2 3 ? 2 1 3 ! 3 1 2 2 3 1 3