This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define lsb(x) (x & (-x))
#define ll long long
#define ull unsigned long long
// 217
// 44
using namespace std;
const int MAXN = (int) 1e6;
char str[MAXN + 1];
int dp[MAXN + 1][3][3], m;
inline void mod(int &x) {
    if(x >= m)
        x -= m;
}
inline void add(int &x, int y) {
    x += y;
    mod(x);
}
int main() {
    //ifstream cin("A.in");
    //ofstream cout("A.out");
    int i, n;
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    cin >> n >> m >> str + 1;
    dp[0][0][0] = 1;
    for(i = 0; i < n; i++) {
        for(int l = 0; l < 3; l++) {
            for(int p = 0; p < 3; p++) {
                if(l < 2) {
                    add(dp[i + 1][l + 1][max(p - 1, 0)], dp[i][l][p]);
                }
                if(p < 2) {
                    add(dp[i + 1][max(l - 1, 0)][p + 1], dp[i][l][p]);
                }
            }
        }
    }
    int ans = 1;
    int best_p = 0, best_l = 0;
    for(i = 1; i <= n; i++) {
        if(str[i] == 'P' && best_l < 2) { // L
            int cur_p = max(best_p - 1, 0);
            int cur_l = best_l + 1;
            for(int l = 0; l < 3; l++) {
                for(int p = 0; p < 3; p++) {
                    if(cur_p + p <= 2 && cur_l + l <= 2) {
                        add(ans, dp[n - i][l][p]);
                    }
                }
            }
        }
        if(str[i] == 'P') {
            best_p++;
            best_l--;
        }
        else {
            best_l++;
            best_p--;
        }
        best_l = max(best_l, 0);
        best_p = max(best_p, 0);
    }
    cout << ans;
    //cin.close();
    //cout.close();
    return 0;
}
Compilation message (stderr)
linear_garden.cpp: In function 'int main()':
linear_garden.cpp:32:26: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     cin >> n >> m >> str + 1;
                      ~~~~^~~| # | 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... |