#include #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma warning(disable:4996) typedef long long ll; #define MIN(a, b) ((a)>(b)? (b): (a)) #define MAX(a, b) ((a)<(b)? (b): (a)) #define LINF 9223300000000000000 #define INF 2140000000 const long long MOD = 1000000007; //const long long MOD = 998244353; using namespace std; class UF { private: int num; vector par; vector siz; public: //vector val; public: UF(int n): num(n) { par.resize(n); siz.resize(n); //val.resize(n); int i; for(i=0; i > g; // to vector vis; vector fin; bool dfs(int curr) { assert(vis[curr]==0); vis[curr]=1; int siz=(int)g[curr].size(); int i; for(i=0; i a(m),b(m),c(m); for(i=0; i > s; for(i=0; i