MOD = 998244353
def solve():
    n = int(input().strip())
    if n == 1:
        print(0)
        return
    # 结果 = (n-1) * 2^(n-2) % MOD
    ans = ( (n-1) % MOD ) * pow(2, n-2, MOD) % MOD
    print(ans)
if __name__ == "__main__":
    solve()
import java.util.*;
public class Main {
    static final int MOD = 998244353;
    // 快速幂:计算 a^e % MOD
    static long powMod(long a, long e) {
        long r = 1;
        while (e > 0) {
            if ((e & 1) == 1) {
                r = r * a % MOD;
            }
            a = a * a % MOD;
            e >>= 1;
        }
        return r;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        sc.close();
        if (n == 1) {
            System.out.println(0);
            return;
        }
        // 结果 = (n-1) * 2^(n-2) % MOD
        long ans = ((n - 1) % MOD) * powMod(2, n - 2) % MOD;
        System.out.println(ans);
    }
}
#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
// 快速幂:计算 a^e % MOD
long long powMod(long long a, long long e) {
    long long r = 1;
    while (e) {
        if (e & 1) {
            r = r * a % MOD;
        }
        a = a * a % MOD;
        e >>= 1;
    }
    return r;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    long long n;
    cin >> n;
    if (n == 1) {
        cout << 0;
        return 0;
    }
    // 结果 = (n-1) * 2^(n-2) % MOD
    long long ans = ((n - 1) % MOD) * powMod(2, n - 2) % MOD;
    cout << ans;
    return 0;
}
        对于仅由 0 和 1 两种字符组成的字符串 s ,定义一次操作为:
选择两个相邻字符,将它们同时取反(即如果字符原本为 0 ,将其变成 1 ;如果字符原本为 1 ,将其变成 0 )。
记 f(s) 为将 s 变为全 0 所需的最少操作次数。若无法变为全 0 ,则该字符串的 f(s) 不计。
现在,给定整数 n ,求所有长度为 n 的合法字符串的 f(s) 之和。由于答案可能很大,请将答案对 998 244 533 取模后输出。
输入一个整数 n(1≦n≦109) 代表字符串长度。
输出一个整数,代表所有长度为 n 的字符串的 f(s) 之和。由于答案可能很大,请将答案对 998 244 533 取模后输出。
输入
2
输出
1
说明
在这个样例中,当 n=2 时,全部的合法字符串有:
“00”,由于不需要任何操作,f=0;
”01“,无法变为全 0 ,不计;
“10”,无法变为全 0 ,不计;
“11”,操作一次即可,所以 f=1 。
输入
4
输出
12
输入
10000
输出
528897405