#include <stdio.h> #include <string.h> #define SIZE 35 char key[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; char val[] = { 'A', '#', '#', '#', '3', '#', '#', 'H', 'I', 'L', '#', 'J', 'M', '#', 'O', '#', '#', '#', '2', 'T', 'U', 'V', 'W', 'X', 'Y', '5', '1', 'S', 'E', '#', 'Z', '#', '#', '8', '#' }; int is_palindrome(char *s) { int len = strlen(s); int i; for (i = 0; i < len; i++) if (s[i] != s[len-1-i]) return 0; return 1; } char zero2O(char c) { if (c == '0') return 'O'; else return c; } int is_mirrored(char *s) { int len = strlen(s); /*char *t = (char *) malloc((len + 1) * sizeof(char)); strcpy(t, s);*/ int i; for (i = 0; i < len; i++) { char c1 = zero2O(s[i]); char c2 = zero2O(s[len-i-1]); int j; for (j = 0; j < SIZE; j++) if (key[j] == c1) break; if (/*(val[j] != '#') &&*/ (val[j] != c2)) return 0; } return 1; } int main() { char s[30]; while (scanf("%s", s) == 1) { int a = is_palindrome(s); int b = is_mirrored(s); printf("%s", s); if (a) { if (b) printf (" -- is a mirrored palindrome./n"); else printf(" -- is a regular palindrome./n"); } else { if (b) printf(" -- is a mirrored string./n"); else printf(" -- is not a palindrome./n"); } printf("/n"); } return 0; }