Recently, a start up by two students of a state university of city F gained incredible popularity. Now it's time to start a new company. But what do we call it?

The market analysts came up with a very smart plan: the name of the company should be identical to its reflection in a mirror! In other words, if we write out the name of the company on a piece of paper in a line (horizontally, from left to right) with large English letters, then put this piece of paper in front of the mirror, then the reflection of the name in the mirror should perfectly match the line written on the piece of paper.

There are many suggestions for the company name, so coming up to the mirror with a piece of paper for each name wouldn't be sensible. The founders of the company decided to automatize this process. They asked you to write a program that can, given a word, determine whether the word is a 'mirror' word or not.

Input

The first line contains a non-empty name that needs to be checked. The name contains at most 105 large English letters. The name will be written with the next sans serif font: 

<image>

Output

Print 'YES' (without the quotes), if the given name matches its mirror reflection. Otherwise, print 'NO' (without the quotes).

Examples

Input

AHA


Output

YES


Input

Z


Output

NO


Input

XO


Output

NO
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.*;

import static java.util.Collections.*;

/**
 * Created with IntelliJ IDEA.
 * User: AUtemuratov
 * Date: 07.04.14
 * Time: 15:43
 * To change this template use File | Settings | File Templates.
 */
public class Main {
    static FastReader fr = new FastReader(new BufferedReader(new InputStreamReader(System.in)));
    static PrintWriter pw = new PrintWriter(System.out);
    static final int maxn = (int)1e5 + 111;
    static int n,m,k,cnt,ans,min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
    static boolean ok;
    static boolean u[] = new boolean[maxn];

    public static void main(String[] args) throws Exception {

        String s = fr.nextToken();
        String c = "AHIMOTUVWXY";

        for (int i=0, j=s.length()-1; i<s.length(); i++,j--) {
            Character t = s.charAt(i);
            if (s.charAt(i) != s.charAt(j) || !c.contains(t.toString())) {
                pw.println("NO");
                pw.close();
                System.exit(0);
            }
        }

        pw.println("YES");

        pw.close();
    }

}

class Person {
    int p,g,t;
    String name;

    Person(int p, int g, int t, String name) {
        this.p = p;
        this.g = g;
        this.t = t;
        this.name = name;
    }
}

class Pair {
    int l,r;
    public Pair(int pos, int dif) {
        this.l = pos;
        this.r = dif;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Pair pair = (Pair) o;

        if (l != pair.l) return false;
        if (r != pair.r) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = l;
        result = 31 * result + r;
        return result;
    }
}

class FastReader {

    BufferedReader bf;
    StringTokenizer tk = null;
    String DELIM = " ";

    public FastReader(BufferedReader bf) {
        this.bf = bf;
    }

    public String nextToken() throws Exception {

        if(tk==null || !tk.hasMoreTokens()) {
            tk = new StringTokenizer(bf.readLine(),DELIM);
        }
        return tk.nextToken();
    }

    public int nextInt() throws Exception {
        return Integer.parseInt(nextToken());
    }

    public int nextLong() throws Exception {
        return Integer.parseInt(nextToken());
    }

    public int nextDouble() throws Exception {
        return Integer.parseInt(nextToken());
    }
}