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)

/************************************************
*Author        :  lxyQAQ
*Created Time  :  sometime
*Problem       :  somenumber
************************************************/
#include<bits/stdc++.h>
using namespace std;
int i,j,k,m,n;
string s;
int main(){
	getline(cin,s);
	int len=s.size();
	if(len%2!=0){
		puts("NO");
		return 0;
	}
	for(i=0,j=len-1;i<j;i++,j--){
			if(s[i]=='b'&&s[j]!='d'){
				puts("NO");
				return 0;
			}else {
				if(s[i]=='d'&&s[j]!='b'){
					puts("NO");
					return 0;
				}else {
					if(s[i]=='p'&&s[j]!='q'){
						puts("NO");
						return 0;
					}
					else {
					if(s[i]=='q'&&s[j]!='p'){
						puts("NO");
						return 0;
					}
				}
			}
		}
	}
	puts("YES");
	return 0;
}