分类讨论最多和最少的情况即可。

对于最多的情况,我们先贪心的给他分配最小的,设,整除后 ,同时。如果为0,那么可以整除,最大就是, 否则,我们可以将多出来的部分,分配到已经分配好的d个集合中,他们现在全为,那么还能够分配进去的个数最多为。只要m不超过这个数,就能够分配好。

对于最少的情况类似,请读者自行分析,有疑问可评论区提出。

import sys

# 输入加速
input = sys.stdin.readline

if __name__ == '__main__':
    t = int(input())
    for _ in range(t):
        a,b,l,r = map(int,input().split())
        diff = b - a
        d1,m1 = divmod(diff,l)
        # 最多的情况:
        mx = d1
        if m1 > 0:
            if m1 <= d1 * (r - l):
                pass 
            else:
                print(-1)
                continue
        d2,m2 = divmod(diff,r)
        #最少的情况
        mn = d2 
        if m2:
            mn += 1
        print(mn,mx)