program main implicit none integer,parameter::limit=100 integer::upper=10**9+1,lower,mid integer::i,ans,query integer,parameter::short=-1,long=1,same=0 integer*8::N query = 99 call ask(query) read *,ans if(ans.eq.same) then print '("!",i0)',query return else if(ans.eq.short) then query = 0 do i=1,limit-1 call ask(query) read *,ans if(ans.eq.same) then print '("!",i0)',i return end if end do print '("!",i0)',query end if lower = 100 do i=1,limit-1 mid = (lower+upper)/2 query = mid-i call ask(query) read *,ans if(ans.eq.same) then print '("!",i0)',i+query return else if(ans.eq.short) then upper = mid else lower = mid end if end do contains subroutine ask(query) integer::query print '("?",i0)',query end subroutine ask end program main