#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; using namespace atcoder; typedef long long ll; typedef pair P; struct unionfind{ vector par, sz; unionfind() {} unionfind(int n):par(n), sz(n, 1){ for(int i=0; isz[y]) swap(x, y); par[x]=y; sz[y]+=sz[x]; } bool same(int x, int y){ return find(x)==find(y); } int size(int x){ return sz[find(x)]; } }; int dp[5050][5050], dp2[5050][5050]; bitset<5000> bs[5050], bs1[5050]; int main() { int n, m; cin>>n>>m; int r[100010], c[100010]; vector vr[5050]; for(int i=0; i>r[i]>>c[i]; r[i]--; c[i]--; vr[c[i]].push_back(r[i]); bs[r[i]][c[i]]=1; } unionfind uf(n); for(int i=0; i v; //v.push_back({uf.size(0), bs1[uf.find(0)].count()}); for(int i=0; i