#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion static long DivInt(long p, long q, bool ceiling) { if (q < 0) return DivInt(-p, -q, ceiling); if (!ceiling && p < 0) p -= q - 1; if (ceiling && p >= 0) p += q - 1; return p / q; } (long, long) Solve() { var n = I(); var ix = I(); var iy = I(); var a = I(); var b = I(); (long, long) Moved(long tx, long ty) => (ix + a * tx, iy - b * ty); var si = ix + iy; if (si >= 0) { var ny = iy - b * n; if (ix + ny >= 0) return (ix, ny); else if (a <= 0) { var k = DivInt(si, b, true); return Moved(n - k, k); } } else { var nx = ix + a * n; if (nx + iy < 0) return (nx, iy); else if (b <= 0) { var k = DivInt(-si, a, true); return Moved(k, n - k); } } long pass = -1; long fail = n + 1; while (Math.Abs(pass - fail) >= 2) { var m = (pass + fail) >> 1; var x = ix + a * m; var y = iy - b * (n - m); var s = x + y; var f = s < a; // var f = true; // if (s > 0) f &= s < a; // if (s < 0) f &= -s <= b; if (f) pass = m; else fail = m; } return Moved(pass, n - pass); } var ans = new List(); var t = I(); for (var i = 0; i < t; i++) { var (x, y) = Solve(); ans.Add(x + " " + y); } Console.WriteLine(string.Join(Environment.NewLine, ans));