#include #include using namespace std; using ll = long long; ll floor_div(ll num, ll div){ if(div < 0){ div = -div; num = -num; } if(num >= 0) return num / div; return (num - (div - 1)) / div; } int main(){ ios::sync_with_stdio(false); cin.tie(0); int T; cin >> T; while(T--){ ll n, m, a, b, c, d; cin >> n >> m >> a >> b >> c >> d; auto rec = [&](auto rec, ll n, ll m, ll a, ll b, ll c, ll d) -> ll { ll ofs = 0; auto f = [&](ll x){ return a * x + b * floor_div(c * x + d, m); }; assert(c >= 0 && d >= 0); ll dc = c / m, dd = d / m; a += b * dc; c -= dc * m; ofs += b * dd; d -= dd * m; if((a >= 0) ^ (b >= 0) ^ true) return ofs + max(f(0), f(n - 1)); // floor((C(N-1) + D) / M) の最大値 ll num = (c * (n - 1) + d) / m; if(num == 0) return ofs + max(f(0), f(n - 1)); ll res = ofs; if(a < 0){ res = max(res, ofs + b + rec(rec, num, c, b, a, m, m + c - 1 - d)); }else{ res += a * (n - 1) + b * num; res = max(res, ofs + rec(rec, num, c, b, a, m, m - d - 1)); } return res; }; cout << rec(rec, n, m, a, b, c, d) << '\n'; } }