import sys,random,bisect from collections import deque,defaultdict from heapq import heapify,heappop,heappush from itertools import permutations from math import gcd input = lambda :sys.stdin.readline().rstrip() mi = lambda :map(int,input().split()) li = lambda :list(mi()) mod = 998244353 N,M = mi() edge = [[0]*N for i in range(N)] edge_S = [0] * N for i in range(M): u,v = mi() u,v = u-1,v-1 edge[u][v] = edge[v][u] = 1 edge_S[u] ^= 1<>i & 1 and S>>j & 1 and edge[i][j]: edge_sz[S] += 1 dp0 = [[[0]*(N) for i in range(1<>nxt & 1 == 0 and edge[now][nxt]: dp0[s][S^(1<> i & 1: n += 1 hamiltonian[S] //= n if n!=1: hamiltonian[S] //= 2 dp1 = [[0]*(N+1) for i in range(1<cutの選び方はn-1通り->(n-1)で割る """ dp1[S][n] //= (n-1) dp2 = [sum(dp1[S]) for S in range(1<