5
5 3
2 4
3 1
4 5
 4
2 4
3 2
2 1
 5
5 3
2 4
3 1
4 5
 2
1 2
 4
3 4
2 3
3 1
 10
8 10
2 9
7 8
4 1
7 3
4 7
2 5
2 4
4 6
 5
3 4
3 2
3 1
1 5
 3
1 2
2 3
 5
1 2
1 3
1 4
1 5

1 2
2 3
2 4
 1 3
2 4
3 5
4 5
 1 2
 1 3
2 3
3 4
 1 4
2 4
2 5
2 9
3 7
4 6
4 7
7 8
8 10
 1 3
1 5
2 3
3 4
 1 2
2 3
 1 2
1 3
1 4
1 5

import sys
import math

#def get_ints(): 
#  return map(int, sys.stdin.readline().strip().split())
def inpu():
  return sys.stdin.readline()
 
#lets = 'abcdefghijklmnopqrstuvwxyz'
#letts = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
#key = {lets[i]:i for i in range(26)}
 
#prime  = [1,11,101,1009,10007,100003,1000003,10000019,100000007]
#prime2 = [2,13,103,1013,10009,100019,1000033,10000169,100000049]
 
#big = int(1e9 + 7)

#def gcd(a, b):
#  while b:
#    a, b = b, a%b
#  return a

"""
primes = []

def primes_gen(n):
  for i in range(2,1+int(n**0.5)):
    g = True
    for j in primes:
      if i % j == 0:
        g = False
        break
    if g:
      primes.append(i)

primes_gen(1e9 + 10)
"""

def Q(m):
  print('?',m+1)
  sys.stdout.flush()
  return map(int,input().split())

#T = int(input())

#for t in range(T):

n = int(input())
#n,m = map(int,input().split())
#a = list(map(int,input().split()))
#b = list(map(int,input().split()))  
#a = input()
#a = list(input())
#q = int(input())
done = False

if n == 2:
  print('!')
  print(1,2)

else:

  stag = [0]*n
  st_v = [0]*n
  ed = set()

  r = Q(0)
  i = 0
  for j in r:
    if not stag[j]:
      st_v[j] = {i}
    stag[j] += 1
    st_v[j].add(i)
    i+=1

  o = 0
  oi = 0
  e = 0
  ei = 0
  lstag = len(stag)
  for i in range(1,lstag):
    if i%2:
      o += stag[i]
      oi += 1
    else:
      e += stag[i]
      ei += 1

  if e<o:
    for i in st_v[1]:
      ed.add((1,i+1))

  #print(stag,st_v)

  if o <= e:
    j0 = 1
  else:
    j0 = 2

  while j0 < n and stag[j0]:
    for i0 in st_v[j0]:
      r = Q(i0)
      iii = 1
      for i in r:
        if i == 1:
          ed.add((i0+1,iii))
        iii += 1
    j0 += 2

  print('!')
  for i in ed:
    print(i[0],i[1])