Problem:
Score : 100 points

Problem Statement

You are given a string S consisting of letters b, d, p and q.
Determine whether S is a mirror string.

Here, a mirror string is a string S such that the following sequence of operations on S results in the same string S:

Reverse the order of the characters in S.

Replace each occurrence of b by d, d by b, p by q, and q by p, simultaneously.

Constraints

1 \leq |S| \leq 10^5

S consists of letters b, d, p, and q.

Input

The input is given from Standard Input in the following format:

S

Output

If S is a mirror string, print Yes. Otherwise, print No.

Sample Input 1

pdbq

Sample Output 1

Yes

Sample Input 2

ppqb

Sample Output 2

No

Solution in C++ (GCC 5.4.1) (judge verdict: Runtime Error)

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
string s,s2,s3;
int main(){
	cin>>s;
	int flag=1;
	for(int i=s.size()-1;i>=0;i--){
	    int L=i,R=s.size()-i-1; 
		if (L>R)
		break;
		if(s[L]==s[R])
		flag=0;
		else {
			flag=1;
			break;
		}
	}
	if(!flag){
		cout<<"Yes"<<endl;
		return 0;
	}
	//改b为d，改d为b，改p为q，改q为p
	int cnt=0;
	for(int i=0;i<s.size();i++){
		s2[s.size()-i-1]=s[i];
	//	cout<<s2[s.size()-i-1]<<" "<<s[i]<<endl;;
		if(s2[s.size()-i-1]=='b')
		s2[s.size()-i-1]='d';
		else if(s2[s.size()-i-1]=='d')
		s2[s.size()-i-1]='b';
		if(s2[s.size()-i-1]=='p')
		s2[s.size()-i-1]='q';
		else if(s2[s.size()-i-1]=='q')
		s2[s.size()-i-1]='p';
	//	cout<<s2[s.size()-i-1]<<endl; 
		if(s2[s.size()-i-1]==s[s.size()-i-1])
		 cnt=1;
		 else{
		 	cnt=0;
		 	break;
		 }
	}
	if(cnt){
		cout<<"Yes"<<endl;
		return 0; 
	}
	cout<<"No"<<endl;
	return 0;
}