Problem: While walking down the street Vanya saw a label "Hide&Seek". Because he is a programmer, he used & as a bitwise AND for these two words represented as a integers in base 64 and got new word. Now Vanya thinks of some string s and wants to know the number of pairs of words of length |s| (length of s), such that their bitwise AND is equal to s. As this number can be large, output it modulo 109 + 7.

To represent the string as a number in numeral system with base 64 Vanya uses the following rules:

  * digits from '0' to '9' correspond to integers from 0 to 9; 
  * letters from 'A' to 'Z' correspond to integers from 10 to 35; 
  * letters from 'a' to 'z' correspond to integers from 36 to 61; 
  * letter '-' correspond to integer 62; 
  * letter '_' correspond to integer 63. 

Input

The only line of the input contains a single word s (1 ≤ |s| ≤ 100 000), consisting of digits, lowercase and uppercase English letters, characters '-' and '_'.

Output

Print a single integer — the number of possible pairs of words, such that their bitwise AND is equal to string s modulo 109 + 7.

Examples

Input

z


Output

3


Input

V_V


Output

9


Input

Codeforces


Output

130653412

Note

For a detailed definition of bitwise AND we recommend to take a look in the corresponding article in Wikipedia.

In the first sample, there are 3 possible solutions: 

  1. z&_ = 61&63 = 61 = z
  2. _&z = 63&61 = 61 = z
  3. z&z = 61&61 = 61 = z

Solution (in JAVA):

Solution:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class C {
    static Map<Character, String> character64Map;

    private static void initCharacter64Map() {
        character64Map = new HashMap<>();
        character64Map.put('0', "000000");
        character64Map.put('1', "000001");
        character64Map.put('2', "000010");
        character64Map.put('3', "000011");
        character64Map.put('4', "000100");
        character64Map.put('5', "000101");
        character64Map.put('6', "000110");
        character64Map.put('7', "000111");
        character64Map.put('8', "001000");
        character64Map.put('9', "001001");

        character64Map.put('A', "001010");
        character64Map.put('B', "001011");
        character64Map.put('C', "001100");
        character64Map.put('D', "001101");
        character64Map.put('E', "001110");
        character64Map.put('F', "001111");
        character64Map.put('G', "010000");
        character64Map.put('H', "010001");
        character64Map.put('I', "010010");
        character64Map.put('J', "010011");
        character64Map.put('K', "010100");
        character64Map.put('L', "010101");
        character64Map.put('M', "010110");
        character64Map.put('N', "010111");
        character64Map.put('O', "011000");
        character64Map.put('P', "011001");
        character64Map.put('Q', "011010");
        character64Map.put('R', "011011");
        character64Map.put('S', "011100");
        character64Map.put('T', "011101");
        character64Map.put('U', "011110");
        character64Map.put('V', "011111");
        character64Map.put('W', "100000");
        character64Map.put('X', "100001");
        character64Map.put('Y', "100010");
        character64Map.put('Z', "100011");

        character64Map.put('a', "100100");
        character64Map.put('b', "100101");
        character64Map.put('c', "100110");
        character64Map.put('d', "100111");
        character64Map.put('e', "101000");
        character64Map.put('f', "101001");
        character64Map.put('g', "101010");
        character64Map.put('h', "101011");
        character64Map.put('i', "101100");
        character64Map.put('j', "101101");
        character64Map.put('k', "101110");
        character64Map.put('l', "101111");
        character64Map.put('m', "110000");
        character64Map.put('n', "110001");
        character64Map.put('o', "110010");
        character64Map.put('p', "110011");
        character64Map.put('q', "110100");
        character64Map.put('r', "110101");
        character64Map.put('s', "110110");
        character64Map.put('t', "110111");
        character64Map.put('u', "111000");
        character64Map.put('v', "111001");
        character64Map.put('w', "111010");
        character64Map.put('x', "111011");
        character64Map.put('y', "111100");
        character64Map.put('z', "111101");

        character64Map.put('-', "111110");
        character64Map.put('_', "111111");
    }

    public static void main(String[] args) {
        initCharacter64Map();
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        long reminder = 1000000007l;
        long pairsCount = 1;
        for (int i = 0; i < s.length(); i++) {
            String decoded = decodeDigitFrom64(s.charAt(i));
            for (int j = 0; j < decoded.length(); j++) {
                if (decoded.charAt(j) == '0') {
                    pairsCount = (3 * pairsCount) % reminder;
                }
            }
        }
        System.out.println(pairsCount);
    }

    private static String decodeDigitFrom64(char c) {
        return character64Map.get(c);
    }
}