#include using namespace std; using LL=long long; #define FOR(i, l, r)for(int i = (l); i<=(r);++i) #define REP(i, n)FOR(i,0,(n)-1) #define ssize(x)int(x.size()) // auto&operator<<(auto&o,pairp) { // return o << "(" << p.first << ", " << p.second << ")"; // } // auto operator(auto&o, auto x)->decltype(x.end(),o){ // o<<"{";inti=0;for(auto e:x)o<<", "+!i++<= 0) putchar_unlocked(t[i]); putchar_unlocked('\n'); } struct Matching { vector> &adj; vector mat, vis; int t = 0, ans = 0; bool mat_dfs(int v) { vis[v] = t; for (int u : adj[v]) { if (mat[u] == -1) { mat[u]= v; mat[v] = u; return true; } } for (int u : adj[v]) { if (vis[mat[u]] != t && mat_dfs(mat[u])) { mat[u] = v; mat[v] = u; return true; } } return false; } Matching(vector>& _adj) : adj(_adj) { mat = vis = vector(ssize(adj), -1); } pair> operator()() { int d = -1; while (d != 0) { d = 0, ++t; REP(v, ssize(adj)) if (mat[v] == -1) d += mat_dfs(v); ans += d; } return {ans, mat}; } }; bool ok(int ile) { // cout << "============= TEZA " << ile << "==============\n"; for (int offset = 0; offset < n; offset++) { // cout << "przesuniecie " << offset << endl; bool zep = false; for (int i = 0; i < n; i++) { if (abs(A[i] - B[i + offset]) < ile) { // cout << "Zepsula para " << A[i] << " " << B[i + offset] << "abs = " << abs(A[i] - B[i + offset]) << endl; zep = true; break; } } if (zep == false) { return true;} } return false; } void solve() { n = fastin(); for (int i = 0; i < n; i++) { A[i] = fastin(); } for (int i = 0; i < n; i++) { B[i] = fastin(); } sort(A, A+n); sort(B, B+n); for (int i = 0; i < n; i++) { B[i + n] = B[i]; } // binsercz po wyniku int pocz = 0; int kon = 1e9 + 5; int mid; while (pocz < kon) { mid = (pocz + kon + 1) / 2; if (!ok(mid)) { // cout << "Teza " << mid << "nie ok\n"; kon = mid - 1; } else { // cout << "Teza " << mid << "ok\n"; pocz = mid; } } fastout(kon); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = fastin(); while (t --> 0) { solve(); } }