#include #define int long long #define MAXN (int)505 #define pii pair #define fi first #define se second using namespace std; int n,m,a[MAXN][MAXN],p[MAXN*MAXN],c[MAXN*MAXN],s[MAXN*MAXN],vv[MAXN][MAXN],d[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; pii r[MAXN*MAXN]; int k(int i,int j){ return m*i+j; }int find(int x){ return p[x]=(x==p[x]?x:find(p[x])); } void unite(int u,int v){ u=find(u); v=find(v); if(s[u]>n>>m; priority_queue>pq; for(int i=0;i>a[i][j]; c[k(i,j)]=r[k(i,j)].se=a[i][j]; pq.emplace(-a[i][j],i,j); } } while(!pq.empty()){ int x,u,v; tie(x,u,v)=pq.top();pq.pop(); vv[u][v]=1; for(int i=0;i<4;i++){ int xx=u+d[i][0],yy=v+d[i][1]; if(xx>=0&&yy>=0&&xx>q; while(q--){ int x,y,u,v;cin>>x>>y>>u>>v;--u;--v;--x;--y; mapl; int z=k(u,v),o=1e9; l[z]=a[z/m][z%m]; while(r[z].fi!=z){ l[r[z].fi]=r[z].se; z=r[z].fi; } z=k(x,y); if(l[z]){ o=min(o,max(l[z],a[z/m][z%m])); } while(r[z].fi!=z){ if(l[r[z].fi]){ o=min(o,max(l[r[z].fi],r[z].se)); } z=r[z].fi; } cout<>T; while(T--) { solve(); } return 0; }