#!/usr/bin/python2 # -*- coding: utf-8 -*- # † import sys from itertools import chain, repeat def Struct(name, fields): fields = fields.replace(',', ' ').split() def __init__(self, *args): n, m = len(args), len(fields) if n > m: raise TypeError('__init__() takes at most {} arguments ({} given)'.format(m, n)) args = chain(args, repeat(None)) for field, value in zip(fields, args): setattr(self, field, value) def __str__(self): return '{}({})'.format(name, ', '.join('{}={}'.format(f, getattr(self, f)) for f in fields)) def __getitem__(self, index): return getattr(self, fields[index]) def __setitem__(self, index, value): setattr(self, fields[index], value) attrs = { '__slots__': fields, '__init__': __init__, '__getitem__': __getitem__, '__setitem__': __setitem__, '__str__': __str__, '__repr__': __str__, } return type(name, (object,), attrs) P = Struct('P', 'x, y') def nya(mes): print mes sys.stdout.flush() M = int(raw_input()) points = [P(*map(int, raw_input().split())) for _ in xrange(M)] nya('? 0 0') p00 = P(*map(int, raw_input().split())) nya('? 1 0') p10 = P(*map(int, raw_input().split())) p10.x -= p00.x p10.y -= p00.y nya('? 0 1') p01 = P(*map(int, raw_input().split())) p01.x -= p00.x p01.y -= p00.y nya('!') for p in points: x = p10.x * p.x + p01.x * p.y + p00.x y = p10.y * p.x + p01.y * p.y + p00.y nya('{} {}'.format(x, y))