#include <bits/stdc++.h>
#define sc(x) scanf("%lld", &(x))
#define pr(x) printf("%lld\n", x)
using namespace std;
typedef long long ll;
const int N = 10 + 7;
const ll mod = 1e9 + 7;
int ht[N];
int fa[N];
int n = 8;  // point numers
void init() {
    for (int i = 1; i <= n; ++i) fa[i] = i, ht[i] = 0;
}
int Find(int x) {
    if (x != fa[x]) fa[x] = Find(fa[x]);  //路径压缩
    return fa[x];
}
int findC(int x) {
    int r = x;
    while (fa[r] != r) r = fa[r];  //找到根节点
    for (int i = x, j; i != r; i = j)
        j = fa[i], fa[i] = r;  //把路径上的元素的集改为根节点
    return r;
}
int a[8] = {0};
void merge(int x, int y) {
    if (!a[x] || !a[y]) return;
    x = Find(x);
    y = Find(y);
    if (ht[x] == ht[y])
        ht[x] = ht[x] + 1, fa[y] = x;
    else if (ht[x] < ht[y])
        fa[x] = y;
    else
        fa[y] = x;
}
bool chk() {
    int cnt = 0;
    for (int i = 1; i <= 7; ++i)
        if (a[i] && i == Find(i)) ++cnt;
    return cnt == 1;
}
int main() {
    int cnt = 0;
    for (int i = 1; i < (1 << 7); ++i) {
        memset(a, 0, sizeof(a));
        for (int j = 1, n = i; j <= 7; ++j) a[j] = n & 1, n >>= 1;
        init();
        merge(1, 2);
        merge(2, 3);
        merge(1, 7);
        merge(3, 7);
        merge(3, 4);
        merge(3, 6);
        merge(4, 5);
        merge(5, 6);
        merge(2, 4);
        merge(6, 7);
        cnt += chk();
    }
    cout << cnt << endl;
    return 0;
}