#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion bool AskGV(List a, int v) { Console.WriteLine($"? {a.Count} {1} {string.Join(' ', a)} {v}"); return I() == 1; } bool AskVV(int u, int v) { Console.WriteLine($"? {1} {1} {u} {v}"); return I() == 1; } var random = new Random(1); var ez = new List<(int, int)>(); void Solve(int v, List a) { var h = a.Count; if (h == 0) return; if (h == 1) { var u = a[0]; if (AskVV(u, v)) ez.Add((u, v)); return; } if (!AskGV(a, v)) return; h >>= 1; var a1 = a[..h]; var a2 = a[h..]; Solve(v, a1); Solve(v, a2); } var n = I(); var a0 = Enumerable.Range(1, n).ToArray(); random.Shuffle(a0); for (var i = n; i > 1; i--) { var a = a0[..(i - 1)]; random.Shuffle(a); Solve(a0[i - 1], [..a]); } Console.WriteLine($"! {ez.Count}"); foreach (var (u, v) in ez) Console.WriteLine($"{u} {v}");