#include <bits/stdc++.h>

typedef unsigned int u32;
typedef unsigned long long u64;

constexpr const u32 mod = 998244353u;
constexpr const u32 inv3 = (mod + 1u) / 3u;
u32 add(u32 x, u32 y) { return x + y < mod ? x + y : x + y - mod; }
u32 sub(u32 x, u32 y) { return x < y ? mod + x - y : x - y; }
u32 mul(u32 x, u32 y) { return (u64)x * y % mod; }

u32 pre2(u32 n) { return mul(n / 2 + (n & 1), n + (~n & 1)); }
u32 pre3(u32 n) { return mul(mul(pre2(n), n + 2), inv3); }

int main() {
	u32 n;
	std::cin >> n;
	if (n == 1u) {
		std::cout << '5' << std::endl;
		return 0;
	}
	std::vector<u32> f(n + 1), g(n + 1);
	f[0] = 1;
	f[1] = 2;
	g[0] = 1;
	g[1] = 3;
	for (u32 i = 2; i <= n; ++i) {
		f[i] = add(f[i - 1], add(mul(f[i - 1], g[i - 2]), pre2(f[i - 1])));
		g[i] = add(g[i - 1], f[i]);
	}
	u32 ans = add(f[n], add(add(mul(f[n - 1], pre2(g[n - 2])), mul(g[n - 2], pre2(f[n - 1]))), pre3(f[n - 1])));
	ans = sub(mul(ans, 2), 1);
	for (u32 i = 1; i + 1u != n; ++i) {
		ans = add(ans, mul(sub(f[i], f[i - 1]), sub(f[n - 1 - i], 1)));
	}
	std::cout << ans << std::endl;
	return 0;
}
