#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using lint = long long; map, bool> memo; bool rec(int N, int X, bool a_done, bool b_done) { if (N < X) return N % 2 ? true : false; const auto tpl = make_tuple(N, X, a_done, b_done); if (memo.count(tpl)) return memo[tpl]; bool ret = false; if (!rec(N - 1, X, b_done, false)) ret = true; if (!a_done and !rec(N - X, X, b_done, true)) ret = true; return memo[tpl] = ret; } bool experiment(int N, int X) { return rec(N, X, false, false); } lint solve(lint N, lint X) { if (X % 2 == 1) return (N + 1) / 2; lint rec = X + 3; lint len = N + 1; lint ret = len / rec * ((rec + 1) / 2), md = len % rec; ret += md / 2; if (md + 2 == rec) ++ret; return ret; } int main() { cin.tie(nullptr), ios::sync_with_stdio(false); int T; cin >> T; while (T--) { lint N, X; cin >> N >> X; cout << solve(N, X) % 998244353 << '\n'; } }