Problem:
Score : 200 points

Problem Statement

For a string S consisting of the uppercase English letters P and D, let the doctoral and postdoctoral quotient of S be the total number of occurrences of D and PD in S as contiguous substrings. For example, if S = PPDDP, it contains two occurrences of D and one occurrence of PD as contiguous substrings, so the doctoral and postdoctoral quotient of S is 3.

We have a string T consisting of P, D, and ?.

Among the strings that can be obtained by replacing each ? in T with P or D, find one with the maximum possible doctoral and postdoctoral quotient.

Constraints

1 \leq |T| \leq 2 \times 10^5

T consists of P, D, and ?.

Input

Input is given from Standard Input in the following format:

T

Output

Print one string with the maximum possible doctoral and postdoctoral quotient among the strings that can be obtained by replacing each ? in T with P or D.
If there are multiple such strings, you may print any of them.

Sample Input 1

PD?D??P

Sample Output 1

PDPDPDP

This string contains three occurrences of D and three occurrences of PD as contiguous substrings, so its doctoral and postdoctoral quotient is 6, which is the maximum doctoral and postdoctoral quotient of a string obtained by replacing each ? in T with P or D.

Sample Input 2

P?P?

Sample Output 2

PDPD

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

#include<bits/stdc++.h>
#define LL long long
#define pb push_back
#define SZ(x) ((int)x.size()-1)
#define ms(a,b) memset(a,b,sizeof a)
#define F(i,a,b) for (int i=(a);i<=(b);++i)
#define DF(i,a,b) for (int i=(a);i>=(b);--i)
using namespace std;
inline int read(){
	char ch=getchar(); int w=1,c=0;
	for(;!isdigit(ch);ch=getchar()) if (ch=='-') w=-1;
	for(;isdigit(ch);ch=getchar()) c=(c<<1)+(c<<3)+(ch^48);
	return w*c;
}
const int M=2e5+10;
char ch[M];
int dp[M][2],fr[M][2];
void dg(int x,int o){
	if (!x) return;
	dg(x-1,fr[x][o]);
	cout<<(o ? 'P' : 'D');
}
int n;
int main(){
	scanf("%s",ch+1); 
	n=strlen(ch+1);
	dp[0][0]=0;
	dp[0][1]=-1e9;
	F(i,1,n){
		F(j,0,1) dp[i][j]=-1e9; 
		if (ch[i]=='D'){
			if (dp[i-1][1]+2>dp[i-1][0]+1) fr[i][0]=1;
			else fr[i][0]=0;
			dp[i][0]=max(dp[i-1][1]+2,dp[i-1][0]+1);
		}
		if (ch[i]=='P'){
			if (dp[i-1][1]>dp[i-1][0]) fr[i][1]=1;
			else fr[i][1]=0;
			dp[i][1]=max(dp[i-1][1],dp[i-1][0]);		
		}
		if (ch[i]=='?'){
			if (dp[i-1][1]+2>dp[i-1][0]+1) fr[i][0]=1;
			else fr[i][0]=0;
			dp[i][0]=max(dp[i-1][1]+2,dp[i-1][0]+1);
			if (dp[i-1][1]>dp[i-1][0]) fr[i][1]=1;
			else fr[i][1]=0;
			dp[i][1]=max(dp[i-1][1],dp[i-1][0]);			
		}
	}
	if (dp[n][0]>dp[n][1]) dg(n,0);
	else dg(n,1);
	return 0;
}