#include<cstdio>#include<cstring>#include<algorithm>#include<fstream>#include<ctime>#include<cstdlib>#define NUM 500#define LL long long using namespace std;LL mod;LL a[NUM],fa[NUM];LL ex[NUM];int n;LL dp[NUM][NUM];LL qm(LL a,LL b){ if (b<0) return 0; LL ans = 1; while (b){ if (b & 1) ans = (ans * a) % mod; a = (a*a) % mod; b>>=1; } return ans;}void init(){ ex[0] = 1; for (int i=1;i<=n+5;i++){ ex[i] = ex[i-1]<<1; ex[i]%=mod; } a[0] = 1; for (int i=1;i<=n+5;i++) a[i] = (a[i-1]*(LL)i) % mod; fa[n+5] = qm(a[n+5],mod-2); for (int i=n-1+5;i>=0;i--) fa[i] = (fa[i+1] * (LL)(i+1)) % mod;}LL c(int x,int y){ if (x < y) return 0; LL ans = a[x]; ans = (ans * fa[x-y]) % mod; ans = (ans * fa[y]) % mod; return ans ;}LL sovle () { // memset(dp,0x0,sizeof(dp)); // memset(a,0x0,sizeof(a)); // memset(fa,0x0,sizeof(fa)); // memset(ex,0x0,sizeof(ex)); init(); dp[0][0] = 1; for (int i=0;i<=n;i++){ for (int j=0;j<=i;j++){ for (int k =1;k<=j;k++){ dp[i+1][j] += (((dp[i-k][j-k] * ex[k-1] ) % mod) * c(j,k)) % mod; dp[i+1][j]%=mod; } } } LL ans = 0; for (int i=1;i<=n;i++) ans = (ans + dp[n+1][i]) % mod; return ans ; //printf("%lld",ans);}int main () { mod = 1000000007ll; scanf("%d",&n); printf("%lld",sovle()); return 0;}
#include <bits/stdc++.h>#define int long longusing namespace std;typedef pair<int,int> pi;typedef long long ll;inline int gin() { int s=0,f=1; char c=getchar(); while(c<'0' || c>'9') { if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9') { s=(s<<3)+(s<<1)+(c^48); c=getchar(); } return s*f;}const int N=405;int n,mod,f[N][N];signed main() { #ifndef ONLINE_JUDGE freopen("test.in","r",stdin); freopen("test.out","w",stdout); #endif n=gin(),mod=gin(); f[0][0]=1; for(int i=0;i<n;i++) for(int j=0;j<=i;j++) { (f[i+1][j+1]+=f[i][j]*(j+1))%=mod; (f[i+1][j]+=f[i][j]*j*2)%=mod; (f[i+2][j]+=f[i][j]*j*2)%=mod; if(j>=2) { (f[i+2][j-1]+=f[i][j]*(j-1)*2)%=mod; (f[i+3][j-1]+=f[i][j]*(j-1))%=mod; } } printf("%lld\n",f[n][1]); return 0;}
#include<bits/stdc++.h>#define int long longusing namespace std;int n,f[505][505],pw[505],c[505][505],mod;signed main(){ cin>>n>>mod;pw[0]=1; for(int i=1;i<=n;i++) pw[i]=pw[i-1]*2,pw[i]%=mod; c[0][0]=1; for(int i=1;i<=n;i++) { c[i][0]=1; for(int j=1;j<=n;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; } f[1][1]=1; for(int i=2;i<=n;i++)//i computer { f[i][i]=pw[i-1];//by hand for(int j=2;j<=i-1;j++)//枚举第一个位置自动开的位置以防止算重 { for(int k=2;k<=min(i-1,j);k++) f[i][j]+=pw[k-2]*c[j][k-1]%mod*f[i-k][j-k+1]%mod, f[i][j]%=mod; } } int ans=0; for(int i=1;i<=n;i++)(ans+=f[n][i])%=mod; cout<<ans;}