/* -*- coding: utf-8 -*- * * 3559.cc: No.3559 +A,-B - yukicoder */ #include #include #include #include using namespace std; /* constant */ /* typedef */ using ll = long long; using mii = map; using mil = map; using tp3 = tuple; using mitp3 = map; /* global variables */ void move(int &n, ll &x, ll &y, int a, int b) { if (n <= 0) return; if (x + y < 0) { // x+y < 0: x,y -> x+a,y int d = (a > 0) ? min((ll)n, (-(x + y) + (a - 1)) / a) : n; x += (ll)d * a; n -= d; } else { // x+y>=0: x,y -> x,y-b int d = (b > 0) ? min((ll)n, ((x + y + 1) + (b - 1)) / b) : n; y -= (ll)d * b; n -= d; } } /* 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); move(n, x, y, a, b); move(n, x, y, a, b); if (x + y >= 0) move(n, x, y, a, b); if (n <= 0) { printf("%lld %lld\n", x, y); continue; } // it's sure that n>0, a>0, b>0, -b<=x+y<0 int xc0 = 0, xc1 = n + 1; while (xc0 + 1 < xc1) { int xc = (xc0 + xc1) / 2; ll yc = max(0LL, ((x + y) + (ll)xc * a + 1 + (b - 1)) / b); if (xc + yc <= n) xc0 = xc; else xc1 = xc; } int yc0 = ((x + y) + (ll)xc0 * a + 1 + (b - 1)) / b; x += (ll)xc0 * a, y -= (ll)yc0 * b; n -= (xc0 + yc0); move(n, x, y, a, b); move(n, x, y, a, b); printf("%lld %lld\n", x, y); } return 0; }