// 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.330647159108335x):
#include<cstdio>

#define pritnf printf

#define scnaf scanf

#define retrun return

#define sizoef sizeof

#define inl inline

#define br break

#define con continue

#define mst(mst_a,mst_b) memset(mst_a,mst_b,sizeof(mst_a))

#define fora(fora_x,fora_a,fora_b) for(re nti (fora_x)=(fora_a);(fora_x)<=(fora_b);++(fora_x))

#define forb(forb_x,forb_a,forb_b) for(re nit (forb_x)=(forb_a);(forb_x)>=(forb_b);--(forb_x))

#define foral(foral_x,foral_a,foral_b) for(re ll (foral_x)=(foral_a);(foral_x)<=(foral_b);++(foral_x))

#define forbl(forbl_x,forbl_a,forbl_b) for(re ll (forbl_x)=(forbl_a);(forbl_x)>=(forbl_b);--(forbl_x))

#define re register

#define stt struct

#define nms namespace

#define gc getchar

#define sl(sl_a) strlen(sl_a)

#define gt(gt_a) goto gt_a

#define rt return

#define infa (0x3f3f3f3f)

#define infb (0x7fffffff)

#define infd (0x7f)

#define in(in_a) freopen("D:/""/in"in_a".in","r",stdin)

#define out(out_a) freopen("D:/""/out"out_a".out","w",stdout)

#define filein(filein_a) freopen(filein_a".in","r",stdin)

#define fileout(fileout_a) freopen(fileout_a".out","w",stdout)

#define file(file_a) filein(file_a);fileout(file_a)

typedef long long ll;

typedef int itn,nti,tin,tni,nit;

using namespace std;

const nit maxa=100004;

const nit maxb=1000004;

const nit maxc=4;

const tni maxd=10004;

#include<cstring>



tni s,ls;

char x[maxa];

bool f=1;



tni main()

{

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

    s=sl(x+1);

    //

    ls=s>>1;

    fora(i,1,ls)

    {

        if(x[i]!=x[s-i+1])

        {

            f=0;

            br;

        }

    }

    //

    if(f)

    {

        pritnf("Yes\n");

        rt 0;

    }

    //

    if(!(s%2))

    {

        f=1;

        fora(i,1,ls)

        {

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

            {

                f=0;

                br;

            }

        }

        //

        if(f)

        {

            printf("Yes\n");

            rt 0;

        }

    }

    //

    printf("No\n");

    rt 0;

}