/* -*- coding: utf-8 -*- * * 3559.cc: No.3559 +A,-B - yukicoder */ #include #include #include #include using namespace std; /* constant */ /* typedef */ using ll = long long; using mil = map; using tp3 = tuple; using mltp3 = map; /* global variables */ /* subroutines */ /* main */ int main() { int tn; scanf("%d", &tn); while (tn--) { int n, a, b; ll x, y; scanf("%d%lld%lld%d%d", &n, &x, &y, &a, &b); //printf(" n=%d, x=%lld,y=%lld, a=%d,b=%d\n", n, x, y, a, b); int c = 0; mltp3 sts; sts[x + y] = {c, x, y}; //mil css; //css[c] = x + y; while (c < n) { if (x + y < 0) { // x+y < 0: x,y -> x+a,y int d = n - c; if (a > 0) d = min((ll)d, (-(x + y) + (a - 1)) / a); x += (ll)d * a; c += d; } else { // x+y>=0: x,y -> x,y-b int d = n - c; if (b > 0) d = min((ll)d, ((x + y + 1) + (b - 1)) / b); y -= (ll)d * b; c += d; } //printf(" c=%d: %lld,%lld\n", c, x, y); if (c >= n) break; auto mit = sts.find(x + y); if (mit != sts.end()) { auto [c0, x0, y0] = mit->second; int dc = c - c0; ll dx = x - x0, dy = y - y0; int q = (n - c) / dc, r = (n - c) % dc; c += dc * q; x += dx * q, y += dy * q; } else { sts[x + y] = {c, x, y}; //css[c] = x + y; } } printf("%lld %lld\n", x, y); } return 0; }