Appoint description:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
string s1,s2;
int main()
{
int flag1=0,flag2=0;
while(cin>>s1)
{
flag1=0;flag2=0;
s2.assign(s1.rbegin(),s1.rend());
if(s1==s2)
{
flag1++;
}
int len=s1.size(),i;
for(i=0;i<len;i++)
{
if(s1[i]=='E'&&s2[i]!='3')
break;
else if(s1[i]=='3'&&s2[i]!='E')
break;
else if(s1[i]=='A'&&s2[i]!='A')
break;
else if(s1[i]=='H'&&s2[i]!='H')
break;
else if(s1[i]=='I'&&s2[i]!='I')
break;
else if(s1[i]=='J'&&s2[i]!='L')
break;
else if(s1[i]=='L'&&s2[i]!='J')
break;
else if(s1[i]=='M'&&s2[i]!='M')
break;
else if(s1[i]=='O'&&s2[i]!='O')
break;
else if(s1[i]=='S'&&s2[i]!='2')
break;
else if(s1[i]=='2'&&s2[i]!='S')
break;
else if(s1[i]=='T'&&s2[i]!='T')
break;
else if(s1[i]=='U'&&s2[i]!='U')
break;
else if(s1[i]=='V'&&s2[i]!='V')
break;
else if(s1[i]=='W'&&s2[i]!='W')
break;
else if(s1[i]=='X'&&s2[i]!='X')
break;
else if(s1[i]=='Y'&&s2[i]!='Y')
break;
else if(s1[i]=='Z'&&s2[i]!='5')
break;
else if(s1[i]=='5'&&s2[i]!='Z')
break;
else if(s1[i]=='1'&&s2[i]!='1')
break;
else if(s1[i]=='8'&&s2[i]!='8')
break;
else if(s1[i]=='B'||s1[i]=='C'||s1[i]=='D'||s1[i]=='F'||s1[i]=='G'||s1[i]=='K'||s1[i]=='N'
||s1[i]=='P'||s1[i]=='Q'||s1[i]=='R'||s1[i]=='4'||s1[i]=='6'||s1[i]=='7'||s1[i]=='9')
break;
}
if(i==len)
flag2++;
cout<<s1;
if(flag1&&flag2)
cout<<" -- is a mirrored palindrome.\n";
if(flag1==0&&flag2)
cout<<" -- is a mirrored string.\n";
if(flag1==0&&flag2==0)
cout<<" -- is not a palindrome.\n";
if(flag1&&flag2==0)
cout<<" -- is a regular palindrome.\n";
cout<<endl;
}
}