1. #include<cstdio>
    2. #include<cstring>
    3. #include<algorithm>
    4. #include<fstream>
    5. #include<ctime>
    6. #include<cstdlib>
    7. #define NUM 500
    8. #define LL long long
    9. using namespace std;
    10. LL mod;
    11. LL a[NUM],fa[NUM];
    12. LL ex[NUM];
    13. int n;
    14. LL dp[NUM][NUM];
    15. LL qm(LL a,LL b){
    16. if (b<0) return 0;
    17. LL ans = 1;
    18. while (b){
    19. if (b & 1)
    20. ans = (ans * a) % mod;
    21. a = (a*a) % mod;
    22. b>>=1;
    23. }
    24. return ans;
    25. }
    26. void init(){
    27. ex[0] = 1;
    28. for (int i=1;i<=n+5;i++){
    29. ex[i] = ex[i-1]<<1;
    30. ex[i]%=mod;
    31. }
    32. a[0] = 1;
    33. for (int i=1;i<=n+5;i++)
    34. a[i] = (a[i-1]*(LL)i) % mod;
    35. fa[n+5] = qm(a[n+5],mod-2);
    36. for (int i=n-1+5;i>=0;i--)
    37. fa[i] = (fa[i+1] * (LL)(i+1)) % mod;
    38. }
    39. LL c(int x,int y){
    40. if (x < y) return 0;
    41. LL ans = a[x];
    42. ans = (ans * fa[x-y]) % mod;
    43. ans = (ans * fa[y]) % mod;
    44. return ans ;
    45. }
    46. LL sovle () {
    47. // memset(dp,0x0,sizeof(dp));
    48. // memset(a,0x0,sizeof(a));
    49. // memset(fa,0x0,sizeof(fa));
    50. // memset(ex,0x0,sizeof(ex));
    51. init();
    52. dp[0][0] = 1;
    53. for (int i=0;i<=n;i++){
    54. for (int j=0;j<=i;j++){
    55. for (int k =1;k<=j;k++){
    56. dp[i+1][j] += (((dp[i-k][j-k] * ex[k-1] ) % mod) * c(j,k)) % mod;
    57. dp[i+1][j]%=mod;
    58. }
    59. }
    60. }
    61. LL ans = 0;
    62. for (int i=1;i<=n;i++)
    63. ans = (ans + dp[n+1][i]) % mod;
    64. return ans ;
    65. //printf("%lld",ans);
    66. }
    67. int main () {
    68. mod = 1000000007ll;
    69. scanf("%d",&n);
    70. printf("%lld",sovle());
    71. return 0;
    72. }
    1. #include <bits/stdc++.h>
    2. #define int long long
    3. using namespace std;
    4. typedef pair<int,int> pi;
    5. typedef long long ll;
    6. inline int gin() {
    7. int s=0,f=1;
    8. char c=getchar();
    9. while(c<'0' || c>'9') {
    10. if(c=='-') f=-1;
    11. c=getchar();
    12. }
    13. while(c>='0'&&c<='9') {
    14. s=(s<<3)+(s<<1)+(c^48);
    15. c=getchar();
    16. }
    17. return s*f;
    18. }
    19. const int N=405;
    20. int n,mod,f[N][N];
    21. signed main() {
    22. #ifndef ONLINE_JUDGE
    23. freopen("test.in","r",stdin);
    24. freopen("test.out","w",stdout);
    25. #endif
    26. n=gin(),mod=gin();
    27. f[0][0]=1;
    28. for(int i=0;i<n;i++) for(int j=0;j<=i;j++) {
    29. (f[i+1][j+1]+=f[i][j]*(j+1))%=mod;
    30. (f[i+1][j]+=f[i][j]*j*2)%=mod;
    31. (f[i+2][j]+=f[i][j]*j*2)%=mod;
    32. if(j>=2) {
    33. (f[i+2][j-1]+=f[i][j]*(j-1)*2)%=mod;
    34. (f[i+3][j-1]+=f[i][j]*(j-1))%=mod;
    35. }
    36. }
    37. printf("%lld\n",f[n][1]);
    38. return 0;
    39. }
    1. #include<bits/stdc++.h>
    2. #define int long long
    3. using namespace std;
    4. int n,f[505][505],pw[505],c[505][505],mod;
    5. signed main()
    6. {
    7. cin>>n>>mod;pw[0]=1;
    8. for(int i=1;i<=n;i++)
    9. pw[i]=pw[i-1]*2,pw[i]%=mod;
    10. c[0][0]=1;
    11. for(int i=1;i<=n;i++)
    12. {
    13. c[i][0]=1;
    14. for(int j=1;j<=n;j++)
    15. c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
    16. }
    17. f[1][1]=1;
    18. for(int i=2;i<=n;i++)//i computer
    19. {
    20. f[i][i]=pw[i-1];//by hand
    21. for(int j=2;j<=i-1;j++)//枚举第一个位置自动开的位置以防止算重
    22. {
    23. for(int k=2;k<=min(i-1,j);k++)
    24. f[i][j]+=pw[k-2]*c[j][k-1]%mod*f[i-k][j-k+1]%mod,
    25. f[i][j]%=mod;
    26. }
    27. }
    28. int ans=0;
    29. for(int i=1;i<=n;i++)(ans+=f[n][i])%=mod;
    30. cout<<ans;
    31. }