import sys p = int(input()) low, high = [-1] * p, [-1] * p used_low, used_high = [False] * p, [False] * p for i in range(p - 1): print("?", i + 1, i + 1, flush=True) value = int(input()) if value == -1: raise SystemExit low[i] = (value - 1) % p high[i] = value - 1 - low[i] used_low[low[i]] = used_high[high[i] // p] = True low[-1] = used_low.index(False) high[-1] = used_high.index(False) * p print("?", 1, p, flush=True) value = int(input()) if value == -1: raise SystemExit low_rows = value == low[0] + high[-1] + 1 print("!") for i in range(p): print(*(low[i] + high[j] + 1 if low_rows else high[i] + low[j] + 1 for j in range(p))) sys.stdout.flush()