求调教
#include<bits/stdc++.h>
using namespace std;
const int N = 100010,M = 200010;
int n, m;
int h[N], e[M], ne[M], idx;
int color[N];
int vis[N], linkx[N];
void add(int a,int b){
e[idx] = b,ne[idx] = h[a],h[a] = idx ++;
}
bool dfs(int u,int c){
color[u] = c;
for (int i = h[u];i != -1; i = ne[i]){
int j = e[i];
if (!color[j]){
if (!dfs(j, 3 - c)) return false;
}else if (color[j] == c) return false;
}
return true;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m;
memset(h, -1, sizeof(h));
while (m --){
int a, b;
cin >> a >> b;
add(a, b), add(b, a);
}
bool flag = true;
for (int i = 1; i <= n; i ++){
if (!color[i]){
if (!dfs(i,1)){
flag = false;
break;
}
}
}
int ans = 0;
if (!flag){ cout << "Impossible\n"; return 0;}
else {
int t = 0;
for (int i = 1; i <= n; i ++) if (color[i] == 1) t ++;
ans = min(t, n - t);
}
printf("%d", ans);
return 0;
}