1 #include<iostream>
2 #include<cstdlib>
3 #include<cstdio>
4 #include<cstring>
5 #include<queue>
6 #include<algorithm>
7 #include<cmath>
8 #include<map>
9 #define N 50
10 using namespace std;
11 int n,m,ans=0x7ffffff;
12 int a[N][N],ope[N];
13 void dfs(int sum,int wz)
14 {
15 if(sum>=ans)return;
16 if(wz==0)
17 {
18 ans=sum;return;
19 }
20 if(a[wz][wz])
21 {
22 int l=a[wz][n+1];
23 for(int i=wz+1;i<=n;i++) if(a[wz][i]) l^=ope[i];
24 if(l)
25 {
26 ope[wz]=1;
27 sum++;
28 }
29 dfs(sum,wz-1);
30 if(l)
31 {
32 ope[wz]=0;
33 sum--;
34 }
35 }
36 else
37 {
38 ope[wz]=1;sum++;dfs(sum,wz-1);
39 ope[wz]=0;sum--;dfs(sum,wz-1);
40 }
41 }
42 void gx()
43 {
44 for(int i=1;i<=n;i++)
45 {
46 int bj=i;
47 while(bj<=n&&!a[bj][i])bj++;
48 if(bj>n)continue;
49 if(bj!=i)
50 {
51 for(int j=1;j<=n+1;j++)
52 {
53 swap(a[i][j],a[bj][j]);
54 }
55 }
56 for(int j=1;j<=n;j++)
57 {
58 if(i==j||!a[j][i])continue;
59 for(int k=1;k<=n+1;k++)
60 a[j][k]^=a[i][k];
61 }
62 }
63 }
64 int main()
65 {
66 scanf("%d%d",&n,&m);
67 for(int i=1;i<=m;i++)
68 {
69 int x,y;
70 scanf("%d%d",&x,&y);
71 a[x][y]=a[y][x]=1;
72 }
73 for(int i=1;i<=n;i++)
74 a[i][i]=1,a[i][n+1]=1;
75 gx();
76 dfs(0,n);
77 printf("%d\n",ans);
78 return 0;
79 }