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

a=[]



for i in range(m):

    ai,bi=list(map(int,input().split()))

    a.append([ai,bi])

              

ni=[0]*n

nii=[]

    

def pathm(n,a,bi,pcnt,ni):

    if n==1:

        pcnt=pcnt+1

#        print("2:","n:",n,"bi:",bi,"pcnt:",pcnt)

        return pcnt

    else:

        n=n-1

        nii.append(bi)

        for mm in range(m):

            if a[mm][0]==bi and not a[mm][1] in nii:

#            if a[mm][0]==bi :

                ni[a[mm][1]-1]=1

#                print("1:","n:",n,"mm:",mm,"a[mm][1]:",a[mm][1],"pcnt:",pcnt)

                pcnt=pathm(n,a,a[mm][1],pcnt,ni)

            if a[mm][1]==bi and not a[mm][0] in nii:

#            if a[mm][1]==bi  and ni[a[mm][0]-1]==0 :

                ni[a[mm][0]-1]=1

#                ni[mm]=1

#                print("1:","n:",n,"mm:",mm,"a[mm][0]:",a[mm][0],"pcnt:",pcnt)

                pcnt=pathm(n,a,a[mm][0],pcnt,ni)

        nii.pop()

        return pcnt       

                

pcnt=0

pcnt1=pathm(n,a,1,pcnt,ni)

print(pcnt1)

q=[]

qq=[]

def dfs(j,q,icnt,count,n,qq):

    if len(qq)==n:

        count+=1

#        print("1",n,j,icnt,count,q[j],qq)

        return count

    icnt+=1

    

    for j2 in q[j]:

        if not j2 in qq:

            qq.append(j2)

#            print("2",n,j,icnt,count,q[j],qq)

            count=dfs(j2,q,icnt,count,n,qq)

            qq.pop()

#        print("3",n,j,icnt,count,q[j],qq)

    return count



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

ab=[[0]*2 for i in range(m)]

for i in range(m):

    ab[i]=list(map(int,input().split()))



#n=3

#m=3

#ab=[[1,2],[1,3],[2,3]]



#n=7

#m=7

#ab=[[1,3],[2,7],[3,4],[4,5],[4,6],[5,6],[6,7]]



q=[[]*2 for i in range(n)]

for i in range(m):

    if not q[ab[i][1]-1] in q[ab[i][0]-1]:

        q[ab[i][0]-1].append(ab[i][1]-1)    

    if not q[ab[i][0]-1] in q[ab[i][1]-1]:

        q[ab[i][1]-1].append(ab[i][0]-1)    

#print(q)    



count=0

j=0

qq=[j]

icnt=1

count=dfs(j,q,icnt,count,n,qq)

print(count)
n, m = list(map(int, input().split()))
a = []
for i in range(m):
    ai, bi = list(map(int, input().split()))
    a.append([ai, bi])
ni = [0] * n
nii = []


def pathm(n, a, bi, pcnt, ni):
    if n == 1:
        pcnt = pcnt + 1
        #        print("2:","n:",n,"bi:",bi,"pcnt:",pcnt)
        return pcnt
    else:
        n = n - 1
        nii.append(bi)
        for mm in range(m):
            if a[mm][0] == bi and not a[mm][1] in nii:
                #            if a[mm][0]==bi :
                ni[a[mm][1] - 1] = 1
                #                print("1:","n:",n,"mm:",mm,"a[mm][1]:",a[mm][1],"pcnt:",pcnt)
                pcnt = pathm(n, a, a[mm][1], pcnt, ni)
            if a[mm][1] == bi and not a[mm][0] in nii:
                #            if a[mm][1]==bi  and ni[a[mm][0]-1]==0 :
                ni[a[mm][0] - 1] = 1
                #                ni[mm]=1
                #                print("1:","n:",n,"mm:",mm,"a[mm][0]:",a[mm][0],"pcnt:",pcnt)
                pcnt = pathm(n, a, a[mm][0], pcnt, ni)
        nii.pop()
        return pcnt


pcnt = 0
pcnt1 = pathm(n, a, 1, pcnt, ni)
print(pcnt1)

q = []
qq = []


def dfs(j, q, icnt, count, n, qq):
    if len(qq) == n:
        count += 1
        #        print("1",n,j,icnt,count,q[j],qq)
        return count
    icnt += 1
    for j2 in q[j]:
        if not j2 in qq:
            qq.append(j2)
            #            print("2",n,j,icnt,count,q[j],qq)
            count = dfs(j2, q, icnt, count, n, qq)
            qq.pop()
    #        print("3",n,j,icnt,count,q[j],qq)
    return count


n, m = list(map(int, input().split()))
ab = [[0] * 2 for i in range(m)]
for i in range(m):
    ab[i] = list(map(int, input().split()))
# n=3
# m=3
# ab=[[1,2],[1,3],[2,3]]
# n=7
# m=7
# ab=[[1,3],[2,7],[3,4],[4,5],[4,6],[5,6],[6,7]]
q = [[] * 2 for i in range(n)]
for i in range(m):
    if not q[ab[i][1] - 1] in q[ab[i][0] - 1]:
        q[ab[i][0] - 1].append(ab[i][1] - 1)
    if not q[ab[i][0] - 1] in q[ab[i][1] - 1]:
        q[ab[i][1] - 1].append(ab[i][0] - 1)
# print(q)
count = 0
j = 0
qq = [j]
icnt = 1
count = dfs(j, q, icnt, count, n, qq)
print(count)

-n, m = list(map(int, input().split())) -a = [] -for i in range(m): -    ai, bi = list(map(int, input().split())) -    a.append([ai, bi]) -ni = [0] * n -nii = [] +q = [] +qq = [] -def pathm(n, a, bi, pcnt, ni): -    if n == 1: -        pcnt = pcnt + 1 -        #        print("2:","n:",n,"bi:",bi,"pcnt:",pcnt) -        return pcnt -    else: -        n = n - 1 -        nii.append(bi) -        for mm in range(m): -            if a[mm][0] == bi and not a[mm][1] in nii: -                #            if a[mm][0]==bi : -                ni[a[mm][1] - 1] = 1 -                #                print("1:","n:",n,"mm:",mm,"a[mm][1]:",a[mm][1],"pcnt:",pcnt) -                pcnt = pathm(n, a, a[mm][1], pcnt, ni) -            if a[mm][1] == bi and not a[mm][0] in nii: -                #            if a[mm][1]==bi  and ni[a[mm][0]-1]==0 : -                ni[a[mm][0] - 1] = 1 -                #                ni[mm]=1 -                #                print("1:","n:",n,"mm:",mm,"a[mm][0]:",a[mm][0],"pcnt:",pcnt) -                pcnt = pathm(n, a, a[mm][0], pcnt, ni) -        nii.pop() -        return pcnt +def dfs(j, q, icnt, count, n, qq): +    if len(qq) == n: +        count += 1 +        #        print("1",n,j,icnt,count,q[j],qq) +        return count +    icnt += 1 +    for j2 in q[j]: +        if not j2 in qq: +            qq.append(j2) +            #            print("2",n,j,icnt,count,q[j],qq) +            count = dfs(j2, q, icnt, count, n, qq) +            qq.pop() +    #        print("3",n,j,icnt,count,q[j],qq) +    return count -pcnt = 0 -pcnt1 = pathm(n, a, 1, pcnt, ni) -print(pcnt1) +n, m = list(map(int, input().split())) +ab = [[0] * 2 for i in range(m)] +for i in range(m): +    ab[i] = list(map(int, input().split())) +# n=3 +# m=3 +# ab=[[1,2],[1,3],[2,3]] +# n=7 +# m=7 +# ab=[[1,3],[2,7],[3,4],[4,5],[4,6],[5,6],[6,7]] +q = [[] * 2 for i in range(n)] +for i in range(m): +    if not q[ab[i][1] - 1] in q[ab[i][0] - 1]: +        q[ab[i][0] - 1].append(ab[i][1] - 1) +    if not q[ab[i][0] - 1] in q[ab[i][1] - 1]: +        q[ab[i][1] - 1].append(ab[i][0] - 1) +# print(q) +count = 0 +j = 0 +qq = [j] +icnt = 1 +count = dfs(j, q, icnt, count, n, qq) +print(count)