#include // #include // #include using namespace std; // using namespace atcoder; // using bint = boost::multiprecision::cpp_int; using ll = long long; using ull = unsigned long long; using ld = long double; using P = pair; using vi = vector; using vvi = vector; using vvvi = vector; using ve = vector>; using vb = vector; using vvb = vector; #define rep(i,n) for(ll i = 0;i < (ll)n;i++) #define ALL(x) (x).begin(),(x).end() #define sz(c) ((ll)(c).size()) #define LB(A,x) (int)(lower_bound(A.begin(),A.end(),x)-A.begin()) #define UB(A,x) (int)(upper_bound(A.begin(),A.end(),x)-A.begin()) // #define MOD 1000000007 #define MOD 998244353 templateusing min_priority_queue=priority_queue,greater>; templateostream&operator<<(ostream&os,vector&v){for(int i = 0;i < v.size();i++)os<istream&operator>>(istream&is,vector&v){for(T&in:v)is>>in;return is;} templateostream&operator<<(ostream&os,pair&p){os<istream&operator>>(istream&is,pair&p){is>>p.first>>p.second;return is;} template inline bool chmax(T &a,T b){if(a < b){a = b;return true;}return false;} template inline bool chmin(T &a,T b){if(a > b){a = b;return true;}return false;} ld dist(ld x1,ld y1,ld x2, ld y2){return sqrtl((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));} // using ld = long double; const int inf = 100000000; // verified https://onlinejudge.u-aizu.ac.jp/status/users/shkii/submissions/1/CGL_5_A/judge/9351284/C++17 // vはfirstについてsortされている必要がある // vはfirstについてsortされている必要がある // vはfirstについてsortされている必要がある int calc_closest_pair(vector,int>> &v,int l,int r){ if(r-l <= 1)return inf; int mid = (l+r)/2; int mid_x = v[mid].first.first; int d = min(calc_closest_pair(v,l,mid),calc_closest_pair(v,mid,r)); sort(v.begin()+l,v.begin()+r,[](pair,int> a,pair,int> b){return a.first.second < b.first.second;}); vector,int>> w[2];//直線mid_xから距離d未満の列挙 for(int i = l;i < r;i++){ if(abs(v[i].first.first-mid_x) < d){ int fl = 1-v[i].second; for(int j = (int)(w[fl].size())-1;j >= 0;j--){//実はこのループは高々5回程度しか回らない int dx = v[i].first.first-w[fl][j].first.first; int dy = v[i].first.second-w[fl][j].first.second; if(dy >= d)break; d = min(d,abs(dx) + abs(dy)); } w[v[i].second].emplace_back(v[i]); } } return d; } // vはfirstについてsortされている必要がある // vはfirstについてsortされている必要がある int main(){ ios_base::sync_with_stdio(0), cin.tie(0); // std::ifstream in("input.txt"); // std::cin.rdbuf(in.rdbuf()); vector,int>> v; int n;cin >> n; rep(i,n){ int a,b;cin >> a >> b; v.emplace_back(pair,int>{{a,b},0}); } int m;cin >> m; rep(i,m){ int a,b;cin >> a >> b; v.emplace_back(pair,int>{{a,b},1}); } sort(ALL(v)); cout << calc_closest_pair(v,0,sz(v)) << "\n"; return 0; }