1 #include<cstdio>
2 #include<cstring>
3 #include<cmath>
4 #include<algorithm>
5
6 using namespace std;
7
8 int ga[100][100],cnt=0,ans,s[100],n;
9
10 void guass()
11 {
12 for(int i=1;i<=n;i++)
13 {
14 int j=i;
15 while(ga[j][i]==0&&j<=n)j++;
16 if(j>n)continue;
17 if(j!=i)
18 {
19 for(int k=1;k<=n+1;k++)
20 swap(ga[i][k],ga[j][k]);
21 }
22 if(!ga[i][i])continue;
23 for(j=1;j<=n;j++)
24 if(ga[j][i]&&j!=i)
25 for(int k=1;k<=n+1;k++)
26 ga[j][k]=ga[j][k]^ga[i][k];
27 }
28 }
29
30 void dfs(int x)
31 {
32 if(cnt>=ans)return;
33 if(x==0)
34 {
35 ans=min(ans,cnt);
36 return;
37 }
38 if(ga[x][x])
39 {
40 int num=ga[x][n+1];
41 for(int i=x+1;i<=n;i++)
42 if(ga[x][i])
43 num=num^s[i];
44 s[x]=num;
45 if(num==1)cnt++;
46 dfs(x-1);
47 if(num==1)cnt--;
48 }
49 if(!ga[x][x])
50 {
51 s[x]=0;dfs(x-1);
52 s[x]=1;cnt++;dfs(x-1);cnt--;
53 }
54 }
55
56 int main()
57 {
58 int m,x,y;
59 scanf("%d%d",&n,&m);
60 for(int i=1;i<=n;i++)
61 ga[i][i]=1,ga[i][n+1]=1;
62 for(int i=1;i<=m;i++)
63 scanf("%d%d",&x,&y),ga[x][y]=ga[y][x]=1;
64 guass();
65 ans=1<<30;dfs(n);
66 printf("%d",ans);
67 return 0;
68 }