#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; typedef long long int 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 main() { int n, d, w; cin>>n>>d>>w; unionfind uf1(n), uf2(n); for(int i=0; i>a>>b; a--; b--; uf1.unite(a, b); } for(int i=0; i>c>>d; c--; d--; uf2.unite(c, d); } map> mp; for(int i=0; i st; for(auto x:v){ st.insert(uf2.find(x)); } ll sum=0; for(auto x:st){ sum+=uf2.size(x); } ans+=(ll)v.size()*sum; } ans-=n; cout<