n, MOD = map(int, input().split()) # i 人目以降の成功数 dp_y = [[0] * 3 for _ in range(n + 1)] # i 人目以降の投げない数 dp_z = [[0] * 3 for _ in range(n + 1)] inv_2 = pow(2, -1, MOD) inv_4 = inv_2 * inv_2 % MOD for i in range(n - 1, -1, -1): dp_y[i][0] = dp_y[i + 1][1] dp_z[i][0] = dp_z[i + 1][1] + 1 dp_y[i][1] = (dp_y[i + 1][2] * inv_2 + (dp_y[i + 1][0] + 1 + dp_y[i + 1][1]) * inv_4) % MOD dp_z[i][1] = ((dp_z[i + 1][2] + 1) * inv_2 + (dp_z[i + 1][0] + dp_z[i + 1][1]) * inv_4) % MOD dp_y[i][2] = (dp_y[i + 1][1] + 1 + dp_y[i + 1][2]) * inv_2 % MOD dp_z[i][2] = (dp_z[i + 1][1] + dp_z[i + 1][2]) * inv_2 % MOD prob = [[0] * 3 for _ in range(n + 1)] prob[0][1] = 1 ans = [0] * n cum = [0] * (n + 1) for i in range(n): if i > 0: cum[i] += cum[i - 1] cum[i] %= MOD prob[i][0] %= MOD prob[i][1] %= MOD prob[i][2] %= MOD # 投げない c = 1 prob[i + 1][1] += prob[i][0] c += cum[i] # 直前までで成功 c += (i - cum[i] - 1) * inv_2 % MOD # 直前までで投げない c += dp_y[i + 1][1] # 以降で成功 ans[i] += c * prob[i][0] % MOD # (どちらでも) c = 1 # (どちらでも)-> 投げる prob[i + 1][0] += prob[i][1] * inv_4 % MOD prob[i + 1][1] += prob[i][1] * inv_4 % MOD c += cum[i] * inv_2 % MOD # 直前までで成功 c += (i - cum[i]) * inv_4 % MOD # 自身が失敗・直前までで投げない c += (dp_y[i + 1][0] + dp_z[i + 1][0]) * inv_4 % MOD # 自身が失敗・以降で成功 or 投げない cum[i + 1] += prob[i][1] * inv_4 % MOD # (どちらでも)-> 投げない prob[i + 1][2] += prob[i][1] * inv_2 % MOD c += cum[i] * inv_2 % MOD # 直前までで成功 c += (i - cum[i]) * inv_4 % MOD # 直前までで投げない c += dp_y[i + 1][2] * inv_2 % MOD # 以降で成功 ans[i] += c * prob[i][1] % MOD # 投げる c = 1 prob[i + 1][1] += prob[i][2] * inv_2 % MOD prob[i + 1][2] += prob[i][2] * inv_2 % MOD c += cum[i] # 直前までで成功 c += (i - cum[i]) * inv_2 % MOD # 自身が失敗・直前までで投げない c += (dp_y[i + 1][1] + dp_z[i + 1][1]) * inv_2 % MOD # 自身が失敗・以降で成功 or 投げない cum[i + 1] += prob[i][2] * inv_2 % MOD ans[i] += c * prob[i][2] % MOD ans[i] %= MOD print(*ans)