#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
using namespace chrono;
typedef long long ll;
typedef pair<ll,ll> pii;
ll exp(ll b, ll e, ll m)
{
if(!e)return 1;
ll mew=exp(b,e/2,m)%m;
if(e%2)return (((mew*mew)%m)*b)%m;
else return (mew*mew)%m;
}
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
ll n,m; cin>>n>>m;
string s; cin>>s;
vector<ll> dp(n+1);
dp[0]=1;
for(ll i=1;i<=n;i++)
{
dp[i]=(exp(2,((i-1)/2),m))+dp[i-1];
}
ll ans=1;
pii mew={2ll,2};
for(ll i=1;i<=n;i++)
{
ll k=n-i;
if(s[i-1]=='P')
{
pii riz={mew.fi-1,min(2ll,mew.se+1)};
if(riz==pii{1,2}||riz==pii{2,1})ans=(ans+dp[k])%m;
if(riz==pii{0,2}||riz==pii{2,0})ans=(ans+exp(2,((k)/2),m))%m;
if(riz==pii{1,1}||riz==pii{1,1})ans=(ans+exp(2,((k+1)/2),m))%m;
if(riz==pii{1,0}||riz==pii{0,1})ans=(ans+1)%m;
mew={min(2ll,mew.fi+1),mew.se-1};
}
else mew={mew.fi-1,min(2ll,mew.se+1)};
}
cout<<(ans%m)<<"\n";
}
| # | 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... |