#include using namespace std; using ll = long long; #define ALL(v) v.begin(),v.end() #define dbg(x) cerr << #x << ": " << (x) << endl; #define MAX (1000) int N,M; vector> P(MAX),Q(MAX); int main() { cin >> N; for (int i = 0; i < N; ++i) { int x,y; cin >> x >> y; P[y].set(x); } cin >> M; for (int i = 0; i < N; ++i) { int x,y; cin >> x >> y; Q[y].set(x); } int ans = 1e9; vector dp(MAX, vector(MAX, 1e9)); for (int i = 0; i < MAX; ++i) { for (int j = 0; j < MAX; ++j) { if (i > 0) dp[i][j] = min(dp[i][j], dp[i-1][j] + 1); if (j > 0) dp[i][j] = min(dp[i][j], dp[i][j-1] + 1); if (Q[i].test(j)) { dp[i][j] = 0; } if (P[i].test(j)) { ans = min(ans, dp[i][j]); } } } for (int i = 0; i < MAX; ++i) { for (int j = 0; j < MAX; ++j) { dp[i][j] = 1e9; } } for (int i = MAX-1; i >= 0; --i) { for (int j = MAX-1; j >= 0; --j) { if (i < MAX-1) dp[i][j] = min(dp[i][j], dp[i+1][j] + 1); if (j < MAX-1) dp[i][j] = min(dp[i][j], dp[i][j+1] + 1); if (Q[i].test(j)) { dp[i][j] = 0; } if (P[i].test(j)) { ans = min(ans, dp[i][j]); } } } cout << ans << '\n'; }