import java.util.*;

public class Euler189 {
    public static void main(String[] args) {
        int size = 8;
        // Build row states for each row
        List<List<int[]>> rowStates = new ArrayList<>();
        for (int r = 0; r < size; r++)
            rowStates.add(buildRowStates(2 * r + 1));
        // DP
        Map<String, Long> dp = new HashMap<>();
        dp.put("", 1L);
        for (int r = 0; r < size; r++) {
            List<int[]> states = rowStates.get(r);
            Map<String, Long> newDp = new HashMap<>();
            for (int[] state : states) {
                String oddSig = oddSig(state);
                String evSig = evenSig(state);
                long total = 0;
                if (r == 0)
                    total = 1;
                else {
                    for (Map.Entry<String, Long> e : dp.entrySet()) {
                        if (compatible(e.getKey(), oddSig))
                            total += e.getValue();
                    }
                }
                newDp.merge(evSig, total, Long::sum);
            }
            dp = newDp;
        }
        System.out.println(dp.values().stream().mapToLong(Long::longValue).sum());
    }

    static boolean compatible(String prevEven, String curOdd) {
        if (prevEven.length() != curOdd.length())
            return false;
        for (int i = 0; i < prevEven.length(); i++)
            if (prevEven.charAt(i) == curOdd.charAt(i))
                return false;
        return true;
    }

    static String evenSig(int[] s) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length; i += 2)
            sb.append(s[i]);
        return sb.toString();
    }

    static String oddSig(int[] s) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < s.length; i += 2)
            sb.append(s[i]);
        return sb.toString();
    }

    static List<int[]> buildRowStates(int w) {
        List<int[]> result = new ArrayList<>();
        gen(w, 0, new int[w], result);
        return result;
    }

    static void gen(int w, int pos, int[] cur, List<int[]> result) {
        if (pos == w) {
            result.add(cur.clone());
            return;
        }
        for (int c = 0; c < 3; c++) {
            if (pos > 0 && cur[pos - 1] == c)
                continue;
            cur[pos] = c;
            gen(w, pos + 1, cur, result);
        }
    }
}
