stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

string s,b;

int main(){

	cin>>s;

	b=s;reverse(s.begin(),s.end());

	for(int i=0;i<s.size();i++)

		switch(s[i]){

			case 'b':s[i]='d';break;

			case 'd':s[i]='b';break;

			case 'p':s[i]='q';break;

			case 'q':s[i]='p';break;

		}

	s==b?puts("Yes"):puts("No");

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.310044749317112x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main()

{

    string a;

    cin>>a;

    string b=a;

    reverse(a.begin(),a.end());

    for(int i=0;i<a.size();++i)

        if (a[i]=='b') a[i]='d'; else

            if (a[i]=='d') a[i]='b'; else

                if (a[i]=='p') a[i]='q'; else

                    if (a[i]=='q') a[i]='p';

    if (a==b) printf("Yes"); else printf("No");

}

// Faster C++ solution for the same problem (measured speedup: 5.30799571416509x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main(){

    string a;

    cin>>a;

    string b=a;

    reverse(a.begin(),a.end());//交换

    for(int i=0;i<a.size();++i)

    {

        if(a[i]=='b') a[i]='d';//镜面对称

        else if(a[i]=='d') a[i]='b';//请注意,else一定要加,不然就白做了

        else if(a[i]=='p') a[i]='q';

        else if(a[i]=='q') a[i]='p';

    }

    if(a==b) cout<<"Yes";//判断

    else cout<<"No";

}

// Faster C++ solution for the same problem (measured speedup: 5.360757793043199x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main(){

    string a;

    cin>>a;

    string b=a;

    reverse(a.begin(),a.end());

    for(int i=0;i<a.size();++i)

    {

        if(a[i]=='b') a[i]='d';

        else if(a[i]=='d') a[i]='b';

        else if(a[i]=='p') a[i]='q';

        else if(a[i]=='q') a[i]='p';

    }

    if(a==b) cout<<"Yes"<<endl;

    else cout<<"No"<<endl;

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.373008834860594x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include<cstdio>

#include<cstring>

#include<map>

using namespace std;

int len;

char c[100001];

map<char,char>m;

int main()

{

	m['b']='d',m['d']='b',m['p']='q',m['q']='p';

	scanf("%s",&c);

	len=strlen(c);

	if(len&1)

	{

	    puts("No");

	    return 0;

	}

	for(int i=0;i<len>>1;++i)

	{

		if(c[i]!=m[c[len-i-1]])

		{

			puts("No");

			return 0;

		}

	}

	puts("Yes");

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 4.936509502971191x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

#define Max 1000005

using namespace std;

char a[Max];

int n;

bool check(int x)

{

	if(a[x]==a[n-x+1]&&a[x]!='d'&&a[x]!='p'&&a[x]!='q'&&a[x]!='b') return 1;

	if(a[x]=='d'&&a[n-x+1]=='b') return 1;

	if(a[x]=='b'&&a[n-x+1]=='d') return 1;

	if(a[x]=='q'&&a[n-x+1]=='p') return 1;

	if(a[x]=='p'&&a[n-x+1]=='q') return 1;

	return 0;

}

int main()

{

	scanf("%s",a+1);

	n=strlen(a+1);

	for(int i=1;i<=(n+1)/2;i++)

		if(!check(i)) puts("No"),exit(0);

	puts("Yes");

}

// Faster C++ solution for the same problem (measured speedup: 5.26429893562286x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main(){

    int i;

	string a;

    cin>>a;

    string b=a;

    reverse(a.begin(),a.end());

    for(i=0;i<a.size();i++){

    if(a[i]=='b'){

	a[i]='d';

	}

    else if(a[i]=='d'){

	a[i]='b';

	}

    else if(a[i]=='p'){

	a[i]='q';

	}

    else if(a[i]=='q'){

	a[i]='p';

    }}

    if(a==b){

	cout<<"Yes";

	}

    else{

	cout<<"No";

	}

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.360757793043199x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include"bits/stdc++.h"

using namespace std;



string s,b;



int main() {

	cin>>s;

	b=s;

	reverse(s.begin(),s.end());

	for(int i=0; i<s.size(); ++i) {

		if(s[i]=='b') s[i]='d';

		else if(s[i]=='d') s[i]='b';

		else if(s[i]=='p') s[i]='q';

		else if(s[i]=='q') s[i]='p';

	}

	if(s==b) cout<<"Yes";

	else cout<<"No";

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.325007989800119x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;

string s,ss;

int main(){

	int i,j,k;

	getline(cin,s);

	ss=s;

	reverse(s.begin(),s.end());

	for(i=0;i<s.length();i++){

		if(s[i]=='b') s[i]='d';

        else if(s[i]=='d') s[i]='b';

        else if(s[i]=='p') s[i]='q';

        else if(s[i]=='q') s[i]='p';

	}

	if(s==ss){

		cout<<"Yes\n";

		return 0;

	}

	cout<<"No\n";

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.3172614723777745x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include<iostream> 

#include<stdio.h>

#include<string>

#include<math.h>

#include<algorithm>

using namespace std;

string a;

char p[300];

int b=1,q;

void init()

{

    p['b'] = 'd';

    p['d'] = 'b';

    p['q'] = 'p';

    p['p'] = 'q';

}

int main()

{

    getline(cin,a);

    init();

    for(int i=0;i<=a.size()-1;i++)

    {

        if(p[a[i]]!=a[a.size()-1-i])

        {

            cout<<"No";

            return 0;

        }

    }

    cout<<"Yes";

}

// Faster C++ solution for the same problem (measured speedup: 5.31084557793621x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include <cstdio> 

#include <cstring>

#include <iostream>

using namespace std;

int l;

char s[100001],c[100001];

int main()

{

	cin>>s;

	l=strlen(s);

	for(int i=0;i<l;i++)

	{

		c[i]=s[l-i-1];

		if(c[i]=='q') c[i]='p';

		else if(c[i]=='p') c[i]='q';

		else if(c[i]=='b') c[i]='d';

		else if(c[i]=='d') c[i]='b';

		if(c[i]!=s[i])

		{

			cout<<"No";break;

		}

		if(i==l-1) cout<<"Yes";

	}

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.314574450694599x):
#include<algorithm>

#include<cstring>

#include<cstdio>

#include<cmath>

char s[100007];

int get[128];

int main()

{

    get['b'] = 0 , get['p'] = 1 , get['d'] = 2 , get['q'] = 3;

    scanf("%s",s+1); 

    for(int l = strlen(s+1), i = 1; i <= (l>>1) + 1; ++i)

    {

        if(get[s[i]]^((get[s[l-i+1]]+2)%4)) 

            return printf("No\n"),0;

    } 

    return printf("Yes\n"),0;

}
// Slower C++ solution:
#include<cstdio>

#include<iostream>

#include<cstring>

#include<stack>

using namespace std;

stack<char>s;

string a;

int main(){

    cin>>a;

    int n=a.size();

    for(int i=0;i<n;i++){

        s.push(a[i]);

    }

    bool ju=1;

    for(int i=0;i<n;i++){

        char top=s.top();

        if(top=='b') top='d';

        else if(top=='d') top='b';

        else if(top=='p') top='q';

        else if(top=='q') top='p';

        if(top==a[i]) {

            ju=1;

            s.pop();

        }

        else {

            ju=0;

            break;

        }

    }

    if(ju==0) printf("No");

    else printf("Yes");

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.127608270847795x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}
// Slower C++ solution:
#include<iostream>

#include<cstdio>

#include<cstring>

#include<cmath>;

using namespace std;

char s[100010];

int main(){

    cin>>s;

    int k=strlen(s);

    if(k%2!=0){

        printf("No");

        return 0;

    }

    for(int i=0;i<k/2;i++){

        int u=abs(s[i]-s[k-i-1]);

        if(u!=1&&u!=2){

            printf("No");

            return 0;

        }

    }

    printf("Yes");

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.080893942060271x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

bool is;

char ch,now,a;

string s;

stack<int> t;

int main()

{

	cin>>s; int n=s.size();

	for(int i=0;i<n;i++)

	    t.push(s[i]);

	for(int i=0;i<n;i++)

	{

		now=t.top();

	    if(now=='b') a='d';

	    else if(now=='d') a='b';

	    else if(now=='p') a='q';

	    else if(now=='q') a='p';

	    if(a==s[i]) t.pop();

		else

		{

			is=1; break;

		}

	}

	if(!is) cout<<"Yes"<<endl;

	else cout<<"No"<<endl;

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.154474310375762x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main()

{

	string s;

	cin>>s;

	if(s.size()&1) 

	{

        printf("No");

        return 0;

    }

	for(int i=0; i<s.size()/2; i++) 

	{

        int r=abs(s[i]-s[s.size()-i-1]);

        if(r!=1&&r!=2) 

        { 

            cout<<"No";

            return 0;

        }

    }

	cout<<"Yes";

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.129401855621291x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

#define l strlen(a)

using namespace std;

char a[100000];int x;

int main()

{

	scanf("%s",&a);x=abs(a[0]-a[l-1]);

	if(l%2==1){cout<<"No\n";return 0;}

	for(int i=0;i<l/2;i++,x=abs(a[i]-a[l-i-1]))

	  if(x!=1&&x!=2){cout<<"No\n";return 0;}

	cout<<"Yes\n";

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.054225834705713x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main()

{char a[100100],b[100100];

 cin>>a;

 strcpy(b,a);

 for(int i=0;i<strlen(b);i++)

    {if(b[i]=='b') b[i]='d';

     else if(b[i]=='p') b[i]='q';

     else if(b[i]=='q') b[i]='p';

     else if(b[i]=='d') b[i]='b';

	}

 for(int i=0;i<strlen(a);i++)

    if(a[i]!=b[strlen(a)-i-1])

      {printf("No\n");

       return 0;

	  }

 printf("Yes\n");

 return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.08425096458258x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

typedef long long LL;

using namespace std;



namespace IO {

    inline LL read() {

        LL o = 0, f = 1; char c = getchar();

        while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }

        while (c > '/' && c < ':') { o = o * 10 + c - '0'; c = getchar(); }

        return o * f;

    }

    inline char recd() {

        char o; while ((o = getchar()) != '1' && o != '0'); return o;

    }

}

using namespace IO;



char Map[233];



int main() {

	Map['b'] = 'd';

	Map['d'] = 'b';

	Map['p'] = 'q';

	Map['q'] = 'p';



	string str; cin >> str;

	for (int pos = 0; pos <= str.size() / 2; pos++)

		if (Map[str[pos]] != str[str.size() - 1 - pos]) {

			puts("No"); return 0;

		}

	puts("Yes");

}


// Faster C++ solution for the same problem (measured speedup: 5.113559385670811x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}
// Slower C++ solution:
#include<cstdio>

#include<iostream>

#include<cstring>

#include<string>

using namespace std;

char s[100001],s2[100010],s3[100001];

int flag=1,len,L,R;

int main(){

    cin>>s;

    len=strlen(s);

    for(int i=len-1;i>=0;i--){

        L=i,R=len-i-1;

        if(s[L]==s[R])

        flag=0;

        else {

            flag=1;

            break;

        }

    }

    if(!flag){

        cout<<"Yes"<<endl;

        return 0;

    }

    int cnt=0;

    for(int i=0;i<len;i++){

        s2[len-i-1]=s[i];

        if(s2[len-i-1]=='b')

        s2[len-i-1]='d';

        else if(s2[len-i-1]=='d')

        s2[len-i-1]='b';

        else if(s2[len-i-1]=='p')

        s2[len-i-1]='q';

        else if(s2[len-i-1]=='q')

        s2[len-i-1]='p';

        if(s2[len-i-1]==s[len-i-1])

         cnt=1;

         else

         {

         	cnt=0;

         	break;

		 }

    }

    if(cnt==1){

        cout<<"Yes"<<endl;

        return 0;

    }

    cout<<"No"<<endl;

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.105243855533016x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}
// Slower C++ solution:
#include<queue>

#include<vector>

#include<algorithm>

#include<map>

#include<stack>

#include<bits/stdc++.h>

using namespace std;

int read()

{

	int kk(0);

	bool fh=true;

	char ch=getchar();

	for(;ch<'0'||ch>'9';)

	{

		if(ch=='-')fh=false;

		ch=getchar();

	}

	for(;ch>='0'&&ch<='9';)

	{

		kk=(kk<<3)+(kk<<1)+(ch^48);

		ch=getchar();

	}

	return fh?kk:-kk;

}

long long readll()

{

	long long kk(0);

	bool fh=true;

	char ch=getchar();

	for(;ch<'0'||ch>'9';)

	{

		if(ch=='-')fh=false;

		ch=getchar();

	}

	for(;ch>='0'&&ch<='9';)

	{

		kk=(kk<<3)+(kk<<1)+(ch^48);

		ch=getchar();

	}

	return fh?kk:-kk;

}

#define INF 214748364

#define MOD 1000000007

#define MAXN

char s[100010],s1[100010];

map<char,char> mp;

int main()

{

	mp['d']='b';

	mp['b']='d';

	mp['q']='p';

	mp['p']='q';

	scanf("%s",s);

	int len=strlen(s);

	for(int i=0;i<len;i++)s1[len-i-1]=s[i];

	for(int i=0;i<len;i++)s1[i]=mp[s1[i]];

	if(strcmp(s,s1)==0)puts("Yes");

	else puts("No");

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.091721700370929x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;

int main()

{

  string s;

  cin>>s;

  int n=s.size();

  int ok=0;

  for(int i=0; i<n; i++)

  {

    int j=n-i-1;

    if((s[i]=='q'&&s[j]=='p')||(s[i]=='b'&&s[j]=='d') ||(s[i]=='d'&&s[j]=='b')||(s[i]=='p'&&s[j]=='q')) {continue;}

    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; i++)

  {

    int j=n-i-1;

    if((s[i]=='q'&&s[j]=='p')||(s[i]=='b'&&s[j]=='d') ||(s[i]=='d'&&s[j]=='b')||(s[i]=='p'&&s[j]=='q')) {continue;}

    ok=1;

  }

  if(ok==0)cout<<"Yes"<<endl;

  else cout<<"No";

  return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.130736765686254x):
#include <stdio.h>

#include <string.h>



int main()

{

	char String[100001],OutString[100001];

	scanf("%s",String);

	int StringLen = strlen(String),Pos = 0,Diff = 0;

	for(int i = StringLen - 1;i >= 0;i--)

		OutString[Pos] = String[i],Pos++;

	for(int i = 0;i < StringLen;i++)

	{

		if(OutString[i] == 'b') OutString[i] = 'd';

		else if(OutString[i] == 'd') OutString[i] = 'b';

		else if(OutString[i] == 'p') OutString[i] = 'q';

		else if(OutString[i] == 'q') OutString[i] = 'p';

	}

	for(int i = 0;i < StringLen;i++)

		if(OutString[i] != String[i]) Diff++;

	if(Diff == 0) printf("Yes");

	else printf("No");

	return 0;

}