n,m=list(map(int,input().split()))

road=[[] for _ in range(n+1)]

for i in range(m):

    a,b=list(map(int,input().split()))

    road[a].append(b)

    road[b].append(a)

dp=[[0]*(n+1) for _ in range(2**n)]

dp[1][1]=1

for i in range(1,2**n):

    for j in range(1,n+1):

        for k in road[j]:

            if not (i>>(k-1))&1:

                dp[i+2**(k-1)][k]+=dp[i][j]

print((sum(dp[2**n-1])))



n,m=list(map(int,input().split()))

root=[[] for _ in range(n+1)]

for i in range(m):

    a,b=list(map(int,input().split()))

    root[a].append(b)

    root[b].append(a)

s=[0]*(n+1)

s[0]=1

s[1]=1

ans=0

def f(a,x):

    global ans

    for i in root[a]:

        if x[i]==0:

            x[i]=1

            f(i,x)

            x[i]=0

    if x.count(1)==n+1:

        ans+=1

f(1,s)

print(ans)



n, m = list(map(int, input().split()))
road = [[] for _ in range(n + 1)]
for i in range(m):
    a, b = list(map(int, input().split()))
    road[a].append(b)
    road[b].append(a)
dp = [[0] * (n + 1) for _ in range(2**n)]
dp[1][1] = 1
for i in range(1, 2**n):
    for j in range(1, n + 1):
        for k in road[j]:
            if not (i >> (k - 1)) & 1:
                dp[i + 2 ** (k - 1)][k] += dp[i][j]
print((sum(dp[2**n - 1])))

n, m = list(map(int, input().split()))
root = [[] for _ in range(n + 1)]
for i in range(m):
    a, b = list(map(int, input().split()))
    root[a].append(b)
    root[b].append(a)
s = [0] * (n + 1)
s[0] = 1
s[1] = 1
ans = 0


def f(a, x):
    global ans
    for i in root[a]:
        if x[i] == 0:
            x[i] = 1
            f(i, x)
            x[i] = 0
    if x.count(1) == n + 1:
        ans += 1


f(1, s)
print(ans)

-road = [[] for _ in range(n + 1)] +root = [[] for _ in range(n + 1)] -    road[a].append(b) -    road[b].append(a) -dp = [[0] * (n + 1) for _ in range(2**n)] -dp[1][1] = 1 -for i in range(1, 2**n): -    for j in range(1, n + 1): -        for k in road[j]: -            if not (i >> (k - 1)) & 1: -                dp[i + 2 ** (k - 1)][k] += dp[i][j] -print((sum(dp[2**n - 1]))) +    root[a].append(b) +    root[b].append(a) +s = [0] * (n + 1) +s[0] = 1 +s[1] = 1 +ans = 0 + + +def f(a, x): +    global ans +    for i in root[a]: +        if x[i] == 0: +            x[i] = 1 +            f(i, x) +            x[i] = 0 +    if x.count(1) == n + 1: +        ans += 1 + + +f(1, s) +print(ans)