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: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;
int s[10000005];
int p=0;
int main(){
	char x;
	while(cin>>x){
		s[p]=x;
		p++;
	}
	int n=p;
	int ok=0;
	for(int i=0;i<=n/2;i++){
		int j=n-i-1;
		if(s[i]=='q'&&s[j]=='p'){}
		else {
		    if(s[i]=='b'&&s[j]=='d'){}
		    else {
			if(s[i]=='d'&&s[j]=='b'){}
		          else {if(s[i]=='p'&&s[j]=='q'){}
		          else ok=1;
	              }
            }
        }
    }
	if(ok==0){
		cout<<"Yes"<<endl;return 0;
	}
	ok=0;
	for(int i=0;i<n;i++){
		if(s[i]=='p')s[i]=='q';
		if(s[i]=='q')s[i]=='p';
		if(s[i]=='b')s[i]=='d';
		if(s[i]=='d')s[i]=='b';
	}
	for(int i=0;i<n/2;i++){
		int j=n-i-1;
		if(s[i]=='q'&&s[j]=='p'){}
		else {
		    if(s[i]=='b'&&s[j]=='d'){}
		    else {
			if(s[i]=='d'&&s[j]=='b'){}
		          else {if(s[i]=='p'&&s[j]=='q'){}
		          else ok=1;
	              }
            }
        }
    }
    if(ok==0)cout<<"Yes"<<endl;
    else cout<<"No";
	return 0;
}