inlineintfpow(int a, int b){ int ans = 1; for (; b; b >>= 1, a = a * 1ll * a % MOD) if (b & 1) ans = ans * 1ll * a % MOD; return ans; } int inv2 = fpow(2, MOD - 2), inv6 = fpow(6, MOD - 2); intC(int f, int d){ if (d == 2) { return (f + 1) * 1ll * f % MOD * inv2 % MOD; } else { return (f + 1) * 1ll * (f + 2) % MOD * 1ll * f % MOD * inv6 % MOD; } }
intmain(){ scanf("%d", &n); f[0] = 1; for (int k = 1; k <= n; k++) for (int a = 0; a <= k; a++) for (int b = a; b <= k; b++) { int c = k - a - b - 1; if (c < b || b < a) break; if (a == b && b == c) f[k] = (f[k] * 1ll + C(f[a], 3)) % MOD; elseif (a == b) f[k] = (f[k] * 1ll + (C(f[a], 2) % MOD * 1ll * f[c] % MOD)) % MOD; elseif (b == c) f[k] = (f[k] * 1ll + (C(f[b], 2) % MOD * 1ll * f[a] % MOD)) % MOD; else f[k] = (f[k] * 1ll + f[a] * 1ll * f[b] % MOD * f[c] % MOD) % MOD; } printf("%d\n", f[n]); return0; }