def allow(Y,t,s): yl=Y[0] yu=Y[-1] R=set() 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.update(range(lo,hi+1)) return R