def rng(Y,t,s): yl=Y[0] yu=Y[-1] R=[] for l,r in I: a=(l+t)%p b=(r+t)%p if a<=b: Q=[(a-yu,b-yl)] else: Q=[(a-yu,p-1-yl),(-yl,b-yu)] for lo,hi in Q: lo=max(lo,s[0]) hi=min(hi,s[1]) if lo<=hi: R.append((lo,hi)) return R def intr(a,b,t): for l,r in I: c=(l+t)%p d=(r+t)%p if c<=d: if max(a,c)<=min(b,d):return 1 else: if b>=c or a<=d:return 1 return 0 def hit(a,b,c,d,t): lo=a+c hi=b+d if lo>=p:return intr(lo-p,hi-p,t) if hi>=p:return intr(lo,p-1,t) or intr(0,hi-p,t) return intr(lo,hi,t)