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

using namespace std;

int main()

{

  int i;	

  string x,y;

  cin>>x;

  y=x;

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

  for(i=0;i<x.size();i++)

    {

      if(x[i]=='b') 

	    x[i]='d';

      else 

	    if(x[i]=='d') 

		  x[i]='b';

      else 

	    if(x[i]=='p') 

		  x[i]='q';

      else 

	    if(x[i]=='q') 

		  x[i]='p';

    }

  if(x==y) 

	cout<<"Yes"<<endl;

  else 

	cout<<"No"<<endl;

  return 0;

}

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

#include<cstring>

using namespace std;



char a[100005];

char b[100005];

int len1,len2;



int main()

{

	scanf("%s",a);

	len1 = strlen(a);

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

		b[i] = a[i];

	len2 = len1 / 2;

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

	{

		char k;

		k = a[i];

		a[i] = a[len1 - 1 - i];

		a[len1 - 1 - i] = k;

	}

	for (int i = 0;i < len1;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';

	}

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

		if (a[i] != b[i])

		{

			printf("No\n");

			return 0;

		}

	printf("Yes\n");

	return 0;

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

#define rr register

#define int long long

#define f_for(i,a,b) for(rr int i=a;i<=b;i++)

using namespace std;

const int maxx=1e4;

int n,m;

string a,b;

signed main(){

    cin>>a;

    b=a;

    bool t=true;

    int len=a.length()-1;

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

        switch(a[i]){

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

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

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

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

        }

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

        if(a[i]!=b[len-i])

            t=false;

    if(t)

        cout<<"Yes"<<endl;

    else

        cout<<"No"<<endl;

        return 0;

}

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

#include<cstring>

using namespace std;



char a[100005];

char b[100005];

int len1,len2;



int main()

{

	scanf("%s",a);

	len1 = strlen(a);

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

		b[i] = a[i];

	len2 = len1 / 2;

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

	{

		char k;

		k = a[i];

		a[i] = a[len1 - 1 - i];

		a[len1 - 1 - i] = k;

	}

	for (int i = 0;i < len1;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';

	}

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

		if (a[i] != b[i])

		{

			printf("No\n");

			return 0;

		}

	printf("Yes\n");

	return 0;

}
// Slower C++ solution:
#pragma GCC optimize(2)

#include<bits/stdc++.h>

using namespace std;

string s, t;

int main(){

    ios::sync_with_stdio(false);

    cin >> s;

    t = s;

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

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

        if(s[i] == 98) s[i] = 100;

        else if(s[i] == 100) s[i] = 98;

        else if(s[i] == 112) s[i] = 113;

        else if(s[i] == 113) s[i] = 112;

    }

    if(s == t) cout << (char)89 << (char)101 << (char)115;

    else cout << (char)78 << (char)111;

    return 0;

}

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

#include<cstring>

using namespace std;



char a[100005];

char b[100005];

int len1,len2;



int main()

{

	scanf("%s",a);

	len1 = strlen(a);

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

		b[i] = a[i];

	len2 = len1 / 2;

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

	{

		char k;

		k = a[i];

		a[i] = a[len1 - 1 - i];

		a[len1 - 1 - i] = k;

	}

	for (int i = 0;i < len1;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';

	}

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

		if (a[i] != b[i])

		{

			printf("No\n");

			return 0;

		}

	printf("Yes\n");

	return 0;

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

#include<cstdio>

#include<cstring>

#include<algorithm>



using namespace std;



char a[100010],b[100010];

int cc,flag=1;



void jud()

{

	for(int i=0;i<cc-1;i++)

	{

		if(a[i]!=b[cc-i-2])

		{

			flag=0;

			return ;

		}

	}

}



int main( )

{

	while(~scanf("%c",&a[cc]))

	{

		cc++;

	}

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

	{

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

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

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

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

	}

	jud();

	if(flag==1)cout<<"Yes"<<endl;

	else cout<<"No"<<endl;

	return 0;

}

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

#include<cstring>

using namespace std;



char a[100005];

char b[100005];

int len1,len2;



int main()

{

	scanf("%s",a);

	len1 = strlen(a);

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

		b[i] = a[i];

	len2 = len1 / 2;

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

	{

		char k;

		k = a[i];

		a[i] = a[len1 - 1 - i];

		a[len1 - 1 - i] = k;

	}

	for (int i = 0;i < len1;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';

	}

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

		if (a[i] != b[i])

		{

			printf("No\n");

			return 0;

		}

	printf("Yes\n");

	return 0;

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

#include<iostream>

#include<stack>

using namespace std;



stack<char>a;

char c [100004];

int bo;



char zh ( char p );



int main()

{

	string c;

	getline(cin,c);

	for(int i=0;c[i]!='\0';i++)

	{

		a.push(c[i]);

	}

	for(int i=0;c[i]!='\0';i++)

	{

		if(c[i]==zh(a.top()))

			a.pop();

		else

		{

			bo=1;

			break;

		}

	}

	if(bo==1)

		cout<<"No";

	else

		cout<<"Yes";

	return 0;

	}

char zh(char p)

{

	switch(p)

	{

		case 'p':return 'q';

		case 'q':return 'p';

		case 'b':return 'd';

		case 'd':return 'b';

	}

	return '0';

}

// Faster C++ solution for the same problem (measured speedup: 5.3605462135861615x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

#include<iostream>

#include<cstring>

#define maxn 100005

using namespace std;

char a[maxn],b[maxn];

char f[maxn];

int main(){

	f['b']='d';f['d']='b';

	f['p']='q';f['q']='p';

	cin>>a;int la=strlen(a);

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

		b[i]=f[a[la-i-1]];

	}

	int tip=0;

	for(int i=0;i<=la-1;i++){

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

			tip=1;break;

		}

	}

	if(tip==0) cout<<"Yes";

	else cout<<"No";

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.318375456555462x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

#include<stack>

using namespace std;

stack<char>s;

string k;

int main(){

    cin>>k;

    int lk=k.length();

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

	{

        s.push(k[i]);

    }

    bool flag=1;

    for(int i=0;i<lk;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==k[i])

		 {

            flag=1;

            s.pop();

        }

        else 

		{

            flag=0;

            break;

        }

    }

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

    else printf("Yes");

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.355902976292039x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

using namespace std;

   char s[100860];

int main(){

 

    scanf("%s",&s);

    int n=strlen(s);

    if(n%2!=0){

        cout<<"No"<<endl;

        return 0;

    }

    else {

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

		int num=abs(s[i]-s[n-1-i]);

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

		{

			cout<<"No"<<endl;

			return 0;

		}

    }}

    cout<<"Yes"<<endl;

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.331130546949885x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

#include<cstring>

#include<algorithm>

using namespace std;

int main()

{

	char s[1000001];

	scanf("%s",&s);

	int len=strlen(s);

	int flag=1;

	if(len%2==1)

	{

		printf("No\n");

		return 0;

	}

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

	{

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

		{

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

			{

				flag=0;

				break;

			}

		}

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

		{

			if(s[len-1-i]!='d')

			{

				flag=0;

				break;

			}

		}

		if(s[i]=='p')

		{

			if(s[len-1-i]!='q')

			{

				flag=0;

				break;

			}

		}

		if(s[i]=='q')

		{

			if(s[len-1-i]!='p')

			{

				flag=0;

				break;

			}

		}

	}

    if(flag==0)printf("No\n");

    else printf("Yes\n");

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.1234391823869254x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

using namespace std;

const int N=100007;

char pre[N],fch[N];

int cnt,n;

char change(char ch){

	if(ch=='b')return 'd';

	if(ch=='d')return 'b';

	if(ch=='p')return 'q';

	if(ch=='q')return 'p';

}

int main(){

	pre[1]=getchar();

	cnt=1;

	char ch;

	while(cin>>ch){

		pre[++cnt]=ch;		

	}

	n=cnt++;

	//for(int i=1;i<=cnt;i++)cout<<pre[i];

	for(int i=n;i>=1;i--){

		fch[i]=change(pre[--cnt]);

	}

	cnt=n;

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

		if(fch[i]!=pre[cnt]){

			puts("No");

			return 0;

		}

		cnt--;

	}

	puts("Yes");

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.276516043897341x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

#define l strlen(s)

using namespace std;

int main(){

	char s[100012]={};

    scanf("%s",&s);

    if(l%2==1){

        printf("No");

        return 0;

    }

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

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

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

            printf("No");

            return 0;

        }

    }

    printf("Yes");

}

// Faster C++ solution for the same problem (measured speedup: 5.798842825771704x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

    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.355902976292039x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

using namespace std; 

int main(){

    char a[100005],b[100005];

    cin>>a;

    int a1=strlen(a),ans=0;

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

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

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

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

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

    }

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

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

            cout<<"No";

            return 0;

        }

    }

    cout<<"Yes";

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.317541652376135x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

#include <iostream>

#include <cstdio>



const int M = 500500;

char c[M], ch[M];

int len;



int main()

{

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

	len = strlen(c + 1);

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

	{

		switch (c[i])

		{

			case 'b':{

				ch[i] = 'd';

				break;

			}

			case 'd':{

				ch[i] = 'b';

				break;

			}

			case 'p':{

				ch[i] = 'q';

				break;

			}

			case 'q':{

				ch[i] = 'p';

				break;

			}

		}

	}

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

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

		{

			puts("No");

			return 0;

		}

	puts("Yes");

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.264328408558899x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

#include<iostream>

#include<cstring>

using namespace std;

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

int main(){

	cin>>s;

	int flag=1,len=strlen(s);

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

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

		if (L>R)

		break;

		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[i]=s[i];

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

		if(s2[i]=='b')

		s2[i]='d';

		else if(s2[i]=='d')

		s2[i]='b';

		else if(s2[i]=='p')

		s2[i]='q';

		else if(s2[i]=='q')

		s2[i]='p';

		if(s2[i]==s[i])

		 cnt=1;

		 else{

		 		cnt=0;

		 		break;

			 }

	}

	if(cnt==1){

		cout<<"Yes"<<endl;

		return 0; 

	}

	

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

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

		

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

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

		 flag=0;

		else 

		{

			flag=1;

			break;

		}

	}

	if(!flag)

	{

		cout<<"Yes"<<endl;

		return 0;

	}

	for(int i=0;i<len;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.333200253572029x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

#include <cstring>

#include <iostream>

#include <algorithm>

using namespace std;

int main()

{

    std::ios::sync_with_stdio(false);

	string s;

	cin>>s;

	string x=s;

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

	int n=s.length();

	for(int i=0;i<n;++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(x==s)puts("Yes");

	else puts("No");

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.3896704139905705x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

#include <string>

#include <algorithm>

using namespace std;

int main()

{

    string a,b;

    cin>>a;

    b=a;

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

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

		switch(a[i])

		{

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

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

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

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

		} 

    if(a==b)

		cout<<"Yes"<<endl;

    else

		cout<<"No"<<endl;

}

// Faster C++ solution for the same problem (measured speedup: 5.377692382269878x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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



using namespace std;

string a;

int main()

{

	cin>>a;

	int len=a.size();

	if(len%2==1) 

	{

		cout<<"No";

		cout<<endl;

		return 0;

	}

	int r=0;

	for(int i=0,j=len-1;i<j;i++,j--)

	{

		if((a[i]=='p' && a[j]=='q') || (a[i]=='q' && a[j]=='p') ||(a[i]=='d' && a[j]=='b') || (a[i]=='b' && a[j]=='d')) ;

		else 

		{

			r=1;

			break;

		}

	}

	if(r==0) cout<<"Yes";

	else cout<<"No";

	cout<<endl;

	

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.337734161092243x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

using namespace std;

char s[100010];

int main()

{

	scanf("%s",s);

	int l=strlen(s);

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

	{

		if(s[i]=='b'&&s[l-i-1]!='d'||s[i]=='d'&&s[l-i-1]!='b'||s[i]=='p'&&s[l-i-1]!='q'||s[i]=='q'&&s[l-i-1]!='p')

		{

			cout<<"No";

			return 0;

		}

	}

	cout<<"Yes";

}

// Faster C++ solution for the same problem (measured speedup: 5.277741707900212x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

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

using namespace std;

#define maxn 500000

char a[maxn],b[maxn];

int s=1;

int main(){

	while(cin>>a[s]){

		s++;

	}

	for(int i=1;i<=s-1;i++){

		b[i]=a[i];

	}

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

		swap(a[i],a[s-i]);

	}



	for(int i=1;i<=s-1;i++){

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

		}

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

		 }

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

		}

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

		}

	}

	

	for(int i=1;i<=s-1;i++){

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

			cout<<"No"<<endl;return 0;

		}

	}

	cout<<"Yes"<<endl;

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.331250863587711x):
#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); // 从 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;

    } // 这个 +2 %4 刚好让 b 转到 d 上， d 转到 b 上， p 转到 q 上， q 转到 p 上 

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

}