public class Euler265 {
    static long total = 0;
    static byte[] usedEdge;
    static int[] sequence;
    static int seqLen;
    static int edgeCount;
    static int nodeMask;

    static void dfs(int node, int used) {
        if (used == edgeCount) {
            if (node != 0)
                return;
            long value = 0;
            for (int i = 0; i < edgeCount; ++i) {
                value = (value << 1) | sequence[i];
            }
            total += value;
            return;
        }

        for (int bit = 0; bit <= 1; ++bit) {
            int edge = ((node << 1) | bit) & (edgeCount - 1);
            if (usedEdge[edge] != 0)
                continue;
            usedEdge[edge] = 1;
            sequence[seqLen++] = bit;
            dfs(edge & nodeMask, used + 1);
            seqLen--;
            usedEdge[edge] = 0;
        }
    }

    public static String solve() {
        int n = 5;
        edgeCount = 1 << n;
        nodeMask = (1 << (n - 1)) - 1;
        usedEdge = new byte[edgeCount];
        sequence = new int[edgeCount + n + 1];

        for (int i = 0; i < n; ++i)
            sequence[i] = 0;
        seqLen = n;
        usedEdge[0] = 1;

        total = 0;
        dfs(0, 1);
        return String.valueOf(total);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
