#include using namespace std; template bool chmax(T& a, const T& b) { if (a < b) { a = b; return true; } else return false; } template bool chmin(T& a, const T& b) { if (b < a) { a = b; return true; } else return false; } using ll = long long; using VI = vector; using VVI = vector; using VL = vector; using VVL = vector; constexpr long long INF = 8002003004005006007; struct M { ll sm, mx; static M unit() { return {0, -INF}; } friend M operator*(M a, M b) { return {a.sm + b.sm, max(a.mx, a.sm + b.mx)}; } M& operator*=(const M& rhs) { chmax(mx, sm + rhs.mx); sm += rhs.sm; return *this; } }; // https://259-momone.hatenablog.com/entry/2025/04/28/232456 #include template struct has_power_method { private: template static auto check(int) -> decltype(std::declval().power(std::declval()...), std::true_type{}); template static auto check(...) -> std::false_type; public: static constexpr bool value = decltype(check(0))::value; }; #include #include template auto monoid_pow(Monoid x, I exp, Monoid base = Monoid::unit()) { if constexpr (has_power_method::value) { return x.power(exp, base); } else if constexpr (has_power_method::value) { return base * x.power(exp); } else { assert(exp >= 0); Monoid res{base}; while (exp) { if (exp & 1) res *= x; x *= x; exp >>= 1; } return res; } } using I = ll; using Monoid = M; using SafeInteger = __uint128_t; // template Monoid floor_prod(I n, I m, I a, I b, Monoid x, Monoid y) { Monoid prefix_prod{Monoid::unit()}, suffix_prod{Monoid::unit()}; while (true) { x = monoid_pow(y, a / m, x); a %= m; prefix_prod = monoid_pow(y, b / m, prefix_prod); b %= m; const auto y_max{static_cast(a) * n + b}; if (y_max < m) return monoid_pow(x, n, prefix_prod) * suffix_prod; suffix_prod = monoid_pow(x, static_cast(y_max % m) / a, y) * suffix_prod; n = static_cast(y_max / m) - 1; std::swap(a, m); std::swap(x, y); b = m + a - b - 1; } } using namespace std; #define rep(i,n) for(int i = 0; i < (int)(n); i++) #define rrep(i,n) for(int i = (int)(n) - 1; i >= 0; i--) #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) int main() { ios::sync_with_stdio(false); cin.tie(0); int tt; cin >> tt; while (tt--) { ll n, m, a, b, c, d; cin >> n >> m >> a >> b >> c >> d; cout << floor_prod(n, m, c, d, M{a, 0}, M{b, -INF}).mx << '\n'; } }