#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000007;
int dp[MAX][3][3];
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int N, MOD;
string S;
cin >> N >> MOD >> S;
for (int idx = N; idx >= 0; --idx) for (int r = 0; r <= 2; ++r) for (int c = 0; c <= r; ++c) {
if (idx == N) {
dp[idx][r][c] = 1;
continue;
}
dp[idx][r][c] = 0;
if (!(r == 2 && c == 2)) {
int nr = max(r, c + 1);
dp[idx][r][c] = (dp[idx][r][c] + dp[idx + 1][nr][c + 1]) % MOD;
}
if (!(r == 2 && c == 0)) {
int nr = (c == 0 ? r + 1 : r), nc = (c == 0 ? c : c - 1);
dp[idx][r][c] = (dp[idx][r][c] + dp[idx + 1][nr][nc]) % MOD;
}
}
int ans = 1, r = 0, c = 0;
for (int i = 0; i < N; ++i) {
if (S[i] == 'P') {
int nr = (c == 0 ? r + 1 : r);
int nc = (c == 0 ? c : c - 1);
if (nc <= nr && nr <= 2) ans = (ans + max(0, dp[i + 1][nr][nc])) % MOD;
r = max(r, ++c);
}
else {
if (c == 0) r++;
else c--;
}
}
cout << ans;
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |