#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll MOD = 998244353;  // 模数

// 快速幂算法 
// 功能:计算 a^b % mod
// 原理:利用二进制拆分,将指数b表示为二进制形式
// 例如:3^13 = 3^(1101₂) = 3^8 × 3^4 × 3^1
ll power(ll a, ll b, ll mod) {
    ll result = 1;      // 初始结果为1
    a %= mod;           // 先对a取模,防止溢出

    while (b > 0) {     // 当指数大于0时继续
        // 检查b的最低位是否为1
        if (b & 1) {    // 相当于 if (b % 2 == 1)
            // 如果当前位是1,将对应的a^(2^i)乘入结果
            result = result * a % mod;
        }

        // a自乘,从a^1变成a^2, a^4, a^8, ...
        a = a * a % mod;

        // b右移一位,相当于b除以2
        b >>= 1;        // 相当于 b /= 2
    }

    return result;
}

// 模逆元 
// 功能:计算 a 在模 mod 下的乘法逆元
// 定义:若 a × x ≡ 1 (mod p),则称x为a的逆元,记作a^(-1)
// 原理:根据费马小定理,当p为质数时,a^(p-1) ≡ 1 (mod p)
//      因此 a^(p-2) × a ≡ 1 (mod p)
//      所以 a^(-1) = a^(p-2) mod p
ll inv(ll a, ll mod) {
    // 利用费马小定理:a^(-1) = a^(mod-2) mod mod
    return power(a, mod - 2, mod);
}

int main() {
    ios::sync_with_stdio(false), cin.tie(0);

    int T;
    cin >> T; 

    // 卡特兰数C(n)表示:n个元素的合法出栈序列数
    // 卡特兰数:C(n) = (2n)! / ((n+1)! × n!)
    int maxN = 100005;  // 最大n值(根据题目数据范围1≤𝑁≤10^5)
    vector<ll> catalan(maxN);

    // 初始条件
    catalan[0] = 1;  // C(0) = 1
    catalan[1] = 1;  // C(1) = 1

    // 递推计算卡特兰数 
    // 递推公式:C(n) = C(n-1) × 2(2n-1) / (n+1)
    // 推导过程:
    // C(n) = (2n)! / ((n+1)! × n!)
    // C(n-1) = (2n-2)! / (n! × (n-1)!)
    // C(n) / C(n-1) = [(2n)! / ((n+1)! × n!)] / [(2n-2)! / (n! × (n-1)!)]
    //                = (2n)! × n! × (n-1)! / ((n+1)! × n! × (2n-2)!)
    //                = (2n)(2n-1)(2n-2)! / ((n+1) × n × (n-1)! × n!)
    //                = (2n)(2n-1) / ((n+1) × n)
    //                = 2(2n-1) / (n+1)
    // 因此:C(n) = C(n-1) × 2(2n-1) / (n+1)

    for (int i = 2; i < maxN; i++) {
        // 计算 C(i) = C(i-1) × 2(2i-1) / (i+1)

        // 步骤1:C(i-1) × 2(2i-1)
        catalan[i] = catalan[i - 1] * (4 * i - 2) % MOD;

        // 步骤2:除以 (i+1)
        // 在模运算下,除法 = 乘以逆元
        // a / b ≡ a × b^(-1) (mod p)
        catalan[i] = catalan[i] * inv(i + 1, MOD) % MOD;
    }

    // 处理每个测试用例 
    for (int caseNum = 1; caseNum <= T; caseNum++) {
        int n;
        cin >> n;

        ll result;

        // 特判:n=1时,A1不能第一个出栈,无解
        if (n == 1) {
            result = 0;
        }
        else {
            // 答案 = C(n) - C(n-1)
            //  C(n):所有合法的出栈序列数
            //  C(n-1):A1第一个出栈的序列数(相当于剩余n-1个元素的标准问题)
            //  C(n) - C(n-1):A1不第一个出栈的序列数

            result = (catalan[n] - catalan[n - 1] + MOD) % MOD;

            // 加MOD是为了防止结果为负数
            // 在模运算下,(a - b) % MOD 可能是负数
            // 正确做法:(a - b + MOD) % MOD
        }

        cout << "Case #" << caseNum << ": " << result << '\n';
    }

    return 0;
}