#include using namespace std; typedef long long ll; #define fi first #define se second const int N = 1e6; int n; pair p[N]; set> s; map, int> cnt_cell; bool add(int x, int y, int cnt){ if(cnt_cell[{x, y}]){ s.erase({x + y, x, y, cnt_cell[{x, y}]}); } cnt_cell[{x, y}] += cnt; s.insert({x + y, x, y, cnt_cell[{x, y}]}); if(cnt_cell[{x, y}] >= 4){ return false; } return true; } bool solve2(){ s.clear(); cnt_cell.clear(); for(int i = 1; i <= n; ++i){ cnt_cell[{p[i].first, p[i].second}]++; } cnt_cell[{0, 0}] += 1; for(auto [p, cnt_p]: cnt_cell){ s.insert({p.first + p.second, p.first, p.second, cnt_p}); } while(!s.empty()){ auto [sum, x, y, cnt] = *s.begin(); s.erase(s.begin()); if(cnt >= 4){ return false; } --cnt; if(!cnt) continue; if(!add(x + 1, y, cnt)){ return false; } if(!add(y, x + 1, cnt)){ return false; } } return true; } void solve(){ cin >> n; mapmp; for(int i=1; i<=n ;i++){ int x,y;cin >> x >> y; p[i] = {x, y}; mp[-(x+y)]++; } while(!mp.empty()){ auto it=mp.begin(); if(it->fi>=0) break; if(it->se<=1){ mp.erase(it); continue; } mp[it->fi+1]+=it->se/2; mp.erase(it); } if(mp[0]>=3){ cout <<"NO\n"; return; } if(solve2()){ cout << "YES\n"; } else{ cout << "NO\n"; } } int main(){ ios::sync_with_stdio(false);cin.tie(0); int t;cin >> t;while(t--) solve(); }