#include <iostream> #include <vector> using namespace std; vector<bool> visit(10, false); bool isOk(int next, int last) { if (visit[next]) return false; if((next + last)%2==1) return true; int mid = (next + last) / 2; if(visit[mid]==1) return true; int front[] = {1,4,7,1,2,3,1,3}; int back[] = {3,6,9,7,8,9,9,7}; for(int i=0;i<8;i++){ if((last == front[i] && next ==back[i]) || (last == back[i] && next == front[i]))return false; } return true; } int numberofPath(int last, int len) { if (len == 0) return 1; int sum = 0; for (int next = 1; next <= 9; ++next) { if (isOk(next, last)) { visit[next] = true; sum += numberofPath(next, len - 1); visit[next] = false; } } return sum; } int main() { int cnt = 0; for (int len = 4; len <= 9; ++len) { visit[1] = true; cnt += 4 * numberofPath(1, len - 1); visit[1] = false; visit[2] = true; cnt += 4 * numberofPath(2, len - 1); visit[2] = false; visit[5] = true; cnt += numberofPath(5, len - 1); visit[5] = false; } cout << cnt << endl; }