fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int MAXN = 705;
  6. long long nCr[MAXN][MAXN];
  7. long long S[MAXN][MAXN];
  8. long long power2[MAXN];
  9. long long C_arr[MAXN][MAXN];
  10. long long p_powers[MAXN];
  11. long long E[MAXN];
  12.  
  13. int main() {
  14. ios_base::sync_with_stdio(false);
  15. cin.tie(NULL);
  16.  
  17. int N;
  18. long long P;
  19. if (!(cin >> N >> P)) return 0;
  20.  
  21. for (int i = 0; i <= N; ++i) {
  22. nCr[i][0] = 1;
  23. for (int j = 1; j <= i; ++j) {
  24. nCr[i][j] = nCr[i - 1][j - 1] + nCr[i - 1][j];
  25. if (nCr[i][j] >= P) nCr[i][j] -= P;
  26. }
  27. }
  28.  
  29. S[0][0] = 1;
  30. for (int i = 1; i <= N; ++i) {
  31. for (int j = 1; j <= i; ++j) {
  32. S[i][j] = (S[i - 1][j - 1] + j * S[i - 1][j]) % P;
  33. }
  34. }
  35.  
  36. power2[0] = 1;
  37. for (int i = 1; i <= N; ++i) {
  38. power2[i] = (power2[i - 1] * 2);
  39. if (power2[i] >= P) power2[i] -= P;
  40. }
  41.  
  42. for (int k = 0; k <= N; ++k) {
  43. long long x = power2[k];
  44. p_powers[0] = 1;
  45. for (int j = 1; j <= N; ++j) {
  46. p_powers[j] = (p_powers[j - 1] * x) % P;
  47. }
  48. for (int s = 1; s <= N; ++s) {
  49. long long sum = 0;
  50. for (int j = 1; j <= s; ++j) {
  51. long long term = (S[s][j] * p_powers[j]) % P;
  52. if (j & 1) {
  53. sum += term;
  54. if (sum >= P) sum -= P;
  55. } else {
  56. sum -= term;
  57. if (sum < 0) sum += P;
  58. }
  59. }
  60. C_arr[s][k] = sum;
  61. }
  62. }
  63.  
  64. E[0] = 1;
  65. for (int m = 1; m <= N; ++m) {
  66. long long sum = 0;
  67. for (int s = 1; s <= m; ++s) {
  68. long long ways = C_arr[s][m - s];
  69. long long term = (ways * E[m - s]) % P;
  70. term = (term * nCr[m][s]) % P;
  71. sum += term;
  72. if (sum >= P) sum -= P;
  73. }
  74. E[m] = sum;
  75. }
  76.  
  77. long long ans = 0;
  78. for (int m = 0; m <= N; ++m) {
  79. long long term = (nCr[N][m] * E[m]) % P;
  80. ans += term;
  81. if (ans >= P) ans -= P;
  82. }
  83.  
  84. cout << ans << "\n";
  85.  
  86. return 0;
  87. }
Success #stdin #stdout 0.01s 10044KB
stdin
77 777777773
stdout
381787647