// 嘘解法 #include using namespace std; using ll = long long; using pll = pair; using vl = vector ; //1D using vvl = vector ;//2D using vvvl = vector ;//3D using vp = vector ; //1D using vvp = vector ;//2D using vvvp = vector ;//3D using vi = vector ; //1D using vvi = vector ;//2D using vvvi = vector ;//3D using vb = vector ; //1D using vvb = vector ;//2D using vvvb = vector ;//3D using vs = vector ; //1D using vvs = vector ;//2D using vvvs = vector ;//3D const ll INF = 2e18 ; const ll MOD = 998244353; #define rep(i,a,b) for(ll i=(ll)a; i<(ll)b; i++) #define rrep(i,a,b) for(ll i=(ll)b-1; i>=(ll)a; i--) #define all(vec1) (vec1).begin(), (vec1).end() #define rall(vec1) (vec1).rbegin(), (vec1).rend() #define yn(b,ex) if(1){if(b)cout << "Yes" << endl;else cout << "No" << endl ;if(ex)return 0;} #define debug(var) cerr << #var << " : " << var << endl; //fastio struct FastIO { FastIO() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); } } fastio; //あまり(負の数対応) template T ovr(T a,T b){ T ret=a%b; if(ret<0)ret+=b; return ret; } template bool chmax(T &a, T b) { if (a < b) { a = b; return 1; } return 0; } template bool chmin(T &a, T b) { if (a > b) { a = b; return 1; } return 0; } template void in(vector &A) { for(auto&&a:A) cin >> a; } template void in2(vector &A, vector &B) { assert(A.size() == B.size()); for (size_t i = 0; i < A.size() ; i ++ ) { cin >> A[i] >> B[i]; } } /////////main/////// int main() { int T; cin >> T; std::random_device seed_gen; std::mt19937 engine(seed_gen()); while (T--) { int N; cin >> N; vi A(N); in(A); bool ok = false; rep(i,0,10) { unordered_multiset st(all(A)); auto B = A; shuffle(all(B), engine); while (B.size() >= 2) { ll a = B[B.size() - 1], b = B[B.size() - 2]; if (st.find(a + b) == st.end()) { B.pop_back(); B.pop_back(); st.erase(st.find(a)); st.erase(st.find(b)); } else { break; } } if (B.size() <= 1) {ok = true; break;} } if (ok) cout << "Yes" << endl; else cout << "No" << endl; } }