#include<iostream>
#include<string.h>
#include<set>
using namespace std;
set<char> all; // 存放镜像mirror中的特殊对称字符
set<char> a; // 存放镜像mirror中不存在的字符
bool mirror(char s[]) // 判断是否对称
{
char ss[25];
// E-3 J-L S-2 Z-5
all.insert('E');all.insert('3');all.insert('J');all.insert('L');
all.insert('S');all.insert('2');all.insert('Z');all.insert('5');
// B C D F G K N P Q R 4 6 7 9
a.insert('B');a.insert('C');a.insert('D');a.insert('F');a.insert('G');a.insert('K');a.insert('N');
a.insert('P');a.insert('Q');a.insert('R');a.insert('4');a.insert('6');a.insert('7');a.insert('9');
for(int i=0;s[i]!='\0';i++){
if(a.find(s[i])!=a.end()) // 若存在非法字符,则false
return false;
}
for(int i=0;i<=strlen(s)/2;i++){ // 由所提供字符串的前半部分构造对称字符串
if(i==strlen(s)/2){ //为奇数字符串的中间字符赋值
ss[i] = s[i];
break;
}
if(all.find(s[i])==all.end()){
ss[i] = s[i];
ss[strlen(s)-1-i] = s[i];
}
else{
switch(s[i]){
case 'E': ss[i]=s[i]; ss[strlen(s)-1-i]='3';break;
case '3': ss[i]=s[i]; ss[strlen(s)-1-i]='E';break;
case 'J': ss[i]=s[i]; ss[strlen(s)-1-i]='L';break;
case 'L': ss[i]=s[i]; ss[strlen(s)-1-i]='J';break;
case 'S': ss[i]=s[i]; ss[strlen(s)-1-i]='2';break;
case '2': ss[i]=s[i]; ss[strlen(s)-1-i]='S';break;
case 'Z': ss[i]=s[i]; ss[strlen(s)-1-i]='5';break;
case '5': ss[i]=s[i]; ss[strlen(s)-1-i]='Z';break;
}
}
}
ss[strlen(s)]='\0';
if(strcmp(s,ss)==0) // 判断两个字符串是否相同
return true;
else return false;
}
bool palindrome(char s[]) // 判断正逆序读是否相同
{
for(int i=0;i<strlen(s)/2;i++){
if(s[i]!=s[strlen(s)-1-i]) return false;
}
return true;
}
int main()
{
char str[25];
while(cin>>str){ // ctrl+z结束程序
bool mir,pal;
mir = mirror(str); // 判断镜像对称
pal = palindrome(str); // 判断正序逆序相同
if(mir&&pal)
cout<<str<<" -- is a mirrored palindrome."<<endl<<endl;
else if(mir)
cout<<str<<" -- is a mirrored string."<<endl<<endl;
else if(pal)
cout<<str<<" -- is a regular palindrome."<<endl<<endl;
else
cout<<str<<" -- is not a palindrome."<<endl<<endl;
}
return 0;
}