from __future__ import annotations import sys sys.setrecursionlimit(2*10**7) #↓codon=============================== import string Alp_low=list(string.ascii_lowercase) Alp_up=list(string.ascii_uppercase) Digit="0123456789" dij=[[0,1],[1,0],[0,-1],[-1,0]] def nin(): return list(map(int,input().split())) def deq(x): return [i-1 for i in x] mod=998244353 _factorial=[1] def factorial(n): while len(_factorial)<=n: _factorial.append((_factorial[-1]*len(_factorial))%mod) return _factorial[n] _inv_factorial=[1] def inv_factorial(n): while len(_inv_factorial)<=n: _inv_factorial.append((_inv_factorial[-1]*pow(len(_inv_factorial),mod-2,mod))%mod) return _inv_factorial[n] def binom(n,r): if r>=mod: raise ValueError("r is too big") if n<0: return 0 if r>n: return 0 if r<0: return 0 ans=((factorial(n)*inv_factorial(r))%mod*inv_factorial(n-r))%mod return ans def main(): p,=nin() def ask(i,j): print("?",i+1,j+1) return nin()[0]-1 a=ask(0,0) b=ask(0,1) if a%p==b%p: x=[-1]*p y=[-1]*p x[0]=a%p y[0]=a//p y[1]=b//p for i in range(2,p): a=ask(i,i) x[i]=a%p y[i]=a//p sx=set(x) x[1]=[i for i in range(p) if i not in sx][0] print("!") for i in range(p): print(*[x[i]+y[j]*p+1 for j in range(p)]) else: x=[-1]*p y=[-1]*p x[0]=a//p y[0]=a%p y[1]=b%p for i in range(2,p): a=ask(i,i) x[i]=a//p y[i]=a%p sx=set(x) x[1]=[i for i in range(p) if i not in sx][0] print("!") for i in range(p): print(*[x[i]*p+y[j]+1 for j in range(p)]) if __name__=="__main__": main()