h=[] result=[] pos=1 while pos<=10**6: print('?',pos,10**6,1,10**6,flush=True) ans=int(input()) if ans==0: break l=pos r=10**6 while True: if l==r: break m=(l+r)//2 print('?',pos,m,1,10**6,flush=True) ans=int(input()) if ans==True: r=m else: l=m+1 h.append(l) pos=l+1 for x in h: pos=1 while pos<=10**6: print('?',x,x,pos,10**6,flush=True) ans=int(input()) if ans==0: break l=pos r=10**6 while True: if l==r: break m=(l+r)//2 print('?',x,x,pos,m,flush=True) ans=int(input()) if ans==True: r=m else: l=m+1 result.append((x,l)) pos=l+1 print('!',len(result),flush=True) for i in range(len(result)): print(result[i][0],result[i][1])