/* -*- 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, 0<=x+y 0) { // x+y>=0 move(n, x, y, a, b); if (n <= 0) break; // -b<=x+y<0 // x+y<0 move(n, x, y, a, b); if (n <= 0) break; // 0<=x+ysecond; int dn = n0 - n; ll dx = x - x0, dy = y - y0; int q = n / dn; x += dx * q, y += dy * q; n %= dn; } else { sts[(int)(x + y)] = {n, x, y}; } } printf("%lld %lld\n", x, y); } return 0; }