import sys

a = b = 0
z = None

def zeroQ(a, b):
    global z
    if z == None:
        print "?", a, b
        sys.stdout.flush()
        z = int(raw_input())
    return z

for i in range(29, -1, -1):
    #print "***", a, b

    print "?", (a | (1 << i)), b
    sys.stdout.flush()
    r1 = int(raw_input())

    if r1 == 0:
        r = zeroQ(a, b)
        if r < 0:
            b |= 1 << i
        elif r > 0:
            a |= 1 << i
        continue

    print "?", a, (b | (1 << i))
    sys.stdout.flush()
    r2 = int(raw_input())

    if r1 > 0 and r2 < 0:
        continue
    elif r1 < 0 and r2 > 0:
        a |= 1 << i
        b |= 1 << i
    else:
        r = zeroQ(a, b)
        if r < 0:
            b |= 1 << i
        elif r > 0:
            a |= 1 << i

print "!", a, b