#include <bits/stdc++.h>
using namespace std;
#define ll long long 
struct typ{
    ll a,b;
    long long c;
};
bool comon(typ a,typ b){
    return a.a==b.a || a.a==b.b || a.b==b.a || a.b==b.b;
}
ll dfs(bool* used,vector<int>*grg,map<pair<int,int>,int>&grm,int cur,int par,int gpar){
    ll mx=-1;
    if(used[cur]){
        if(grm.count({min(cur,gpar),max(cur,gpar)})>0){
            return grm[{min(cur,par),max(cur,par)}]+grm[{min(cur,gpar),max(cur,gpar)}]+grm[{min(par,gpar),max(par,gpar)}];
        }
        return 0;
    }
    used[cur]=true;
    for(auto v:grg[cur]){
        mx=max(mx,dfs(used,grg,grm,v,cur,par));
    }
    return mx;
}
void solve(){
    ll n;
    cin>>n;
    typ g[n];
    for(ll i=0;i<n;i++){
        ll a,b,c;
        cin>>a>>b>>c;
        g[i]={a,b,c};
    }
    if(n==1){
        cout<<g[0].c<<'\n';
        return; 
    }
    // if(n==2){
    //     if(comon(g[0],g[1])){
    //         cout<<g[0].c+g[1].c<<'\n';
    //     }
    //     else{
    //         cout<<max(g[0].c,g[1].c)<<'\n';
    //     }
    //     return;
    // }
    // if(n==3){
    //     ll mx=max(g[0].c,max(g[1].c,g[2].c));
    //     if(comon(g[0],g[1])&&comon(g[0],g[2])&&comon(g[1],g[2])){
    //         mx=max(mx,g[0].c+g[1].c+g[2].c);
    //     }
    //     if(comon(g[0],g[1])){
    //         mx=max(mx,g[0].c+g[1].c);
    //     }
    //     if(comon(g[1],g[2])){
    //         mx=max(g[0].c+g[2].c,mx);
    //     }
    //     if(comon(g[2],g[0])){
    //         mx=max(mx,g[2].c+g[0].c);
    //     }
    //     cout<<mx;
    //     return;
    // }
    vector<int> gr[2*n+10];
    vector<int> grg[2*n+10];
    map<pair<int,int>,int> grm;
    for(ll i=0;i<n;i++){
        auto t=g[i];
        gr[t.a].push_back(i);
        grg[t.a].push_back(i);
        grg[t.b].push_back(i);
        gr[t.b].push_back(i);
        grm[{t.a,t.b}]=t.c;
    }
    ll mx=-1;
    for(ll i=0;i<2*n+10;i++){
        ll s=0;
        for(auto j:gr[i]){
            s+=g[j].c;
        }
        if(mx<s){
            mx=s;
        }
    }
    // cout<<"first :"<<mx<<'\n';
    bool used[2*n+10];
    for(ll i=0;i<2*n;i++){
        used[i]=false;
    }
    for(ll i=0;i<2*n+10;i++){
        if(used[i]==false)
            mx=max(mx,dfs(used,grg,grm,i,-1,-1));
    }
    cout<<mx<<'\n';
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    ll t;
    cin>>t;
    for(;t>0;t--){
        solve();
    }
}
