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

const ll mod=998244353;
const int MAXN=1000100;
ll dp[MAXN],dp1[MAXN],dp2[MAXN];

ll powmod(ll x,ll p)
{
	ll ret=1;
	while(p)
	{
		if(p&1)
			ret=ret*x%mod;
		x=x*x%mod;
		p>>=1;
	}
	return ret;
}

int main()
{
	ll n,i,ans;
	ll inv2=powmod(2,mod-2);
	ll inv6=powmod(6,mod-2);
	scanf("%lld",&n);
	dp[0]=dp1[0]=dp2[0]=1;
	for(i=1;i<=n;i++)
	{
		dp[i]=(1+dp[i-1]+dp[i-1]*(dp[i-1]+1)%mod*inv2)%mod;
		dp1[i]=(dp[i]-dp[i-1]+mod)%mod;
		dp2[i]=(dp1[i]-dp1[i-1]+mod)%mod;
	}
	ans=0;
	for(i=0;i<n;i++)
	{
		ans=(ans+dp2[i]*dp1[n-1-i])%mod;
	}
	ans=(ans+2*dp[n-1]*(dp[n-1]+1)%mod*(dp[n-1]+2)%mod*inv6)%mod;
	if(n>=2)
		ans=(ans-2*dp[n-2]*(dp[n-2]+1)%mod*(dp[n-2]+2)%mod*inv6)%mod;
	ans=(ans+2*dp[n-1]*(dp[n-1]+1)%mod*inv2)%mod;
	if(n>=2)
		ans=(ans-2*dp[n-2]*(dp[n-2]+1)%mod*inv2)%mod;
	ans=(ans%mod+mod)%mod;
	printf("%lld\n",ans);
}
