#include <bits/stdc++.h>
using namespace std;
#define ll long long int
int check(multiset<int> &s,bool &poss)
{
int score = 0;
if(!s.empty() && poss)
{
int val = (*s.rbegin());
score = val;
s.erase(s.find(val));
}
else
poss = false;
return score;
}
pair<ll,ll> solve(int mask,vector<int> &v)
{
multiset<int> odd,even;
for(int x:v)
{
if(x%2==0)
even.insert(x);
else
odd.insert(x);
}
ll a_score = 0;
ll b_score = 0;
bool a_poss = true;
bool b_poss = true;
while(a_poss || b_poss)
{
if(mask == 0)
{
a_score += check(even,a_poss);
b_score += check(even,b_poss);
mask = 3;
}
else if(mask == 1)
{
a_score += check(even,a_poss);
b_score += check(odd,b_poss);
mask = 2;
}
else if(mask == 2)
{
a_score += check(odd,a_poss);
b_score += check(even,b_poss);
mask = 1;
}
else if(mask == 3)
{
a_score += check(odd,a_poss);
b_score += check(odd,b_poss);
mask = 0;
}
}
return {a_score,b_score};
}
void mainSolve()
{
int n;
cin>>n;
vector<int> v(n);
for(int i=0;i<n;i++)
cin>>v[i];
ll ans = 0;
vector<pair<ll,ll>> poss;
for(int i=0;i<=3;i++)
poss.push_back(solve(i,v));
if(poss[0].second == poss[1].second)
ans = max(ans,max(poss[0].first,poss[1].first));
else if(poss[0].second > poss[1].second)
ans = max(ans,poss[0].first);
else
ans = max(ans,poss[1].first);
if(poss[2].second == poss[3].second)
ans = max(ans,max(poss[2].first,poss[3].first));
else if(poss[2].second > poss[3].second)
ans = max(ans,poss[2].first);
else
ans = max(ans,poss[3].first);
cout<<ans<<endl;
}
int main()
{
int t;
cin>>t;
while (t--)
{
mainSolve();
}
return 0;
}