#include<bits/stdc++.h>
using namespace std;
const int N = 100000 + 10;
int fa[N],fa1[N];
int find(int x)
{
if (fa[x]!=x) return fa[x]=find(fa[x]);
return x;
}
int find1(int x)
{
if (fa1[x]!=x) return fa1[x]=find(fa1[x]);
return x;
}
void hb(int x,int y)
{
int xx=find(x),yy=find(y);
if (xx!=yy)
{
fa[xx]=yy;
}
}
void hb1(int x,int y)
{
int xx=find1(x),yy=find1(y);
if (xx!=yy)
{
fa1[xx]=yy;
}
}
int main()
{
int n,m,x,y;
cin >> n >> m >> x >> y;
for (int i = 1;i <= n;i++ )fa[i] = i;
for (int i = 1;i <= m;i++) fa1[i] = i;
for (int i = 1;i <= x;i++){
int a,b;
cin >> a >> b;
hb(a,b);
}
int sum = n,sum1 = m;
for (int i = 1;i <= n;i++){
if (find(i) != find(1)) {
sum--;
}
}
for (int i = 1;i <= y;i++){
int a,b;
cin >> a >> b;
hb1(abs(a),abs(b));
}
for (int i = 1;i <= m;i++){
if (find1(i) != find1(1)) sum1 --;
}
for (int i = 1;i <= n;i++)cout << i << " " << fa[i] << "\n";
for (int i = 1;i <= m;i++)cout << i << " " << fa1[i] << "\n";
cout << min(sum,sum1);
return 0;
}