#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 (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 = si / b + 1; return Moved(n - k, k); } } else { var nx = ix + a * n; if (nx + iy < 0) return (nx, iy); else if (b <= 0) { var k = (-si + a - 1) / a; 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; 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));