1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
#include <climits>
#include <algorithm>
#include <vector>
#include <stack>
#include <map>
#include <cmath>

using namespace std;


typedef long double LD;
const LD EPS=0.000001;

void test () {
    int n;
    cin >> n;
    map<int, long long> M;
    long long ea=0, eb=0;
    while (n--) {
        int l, a, b;
        cin >> l >> a >> b;
        ea+=l*1LL*a;
        eb+=l*1LL*b;
        
        M[a]+=l;
        M[b]-=l;
    }
    if (ea!=eb) {
        cout << "NIE" << endl;
        return;
    }
    stack<pair<int, LD> > S1, S2;
    vector<pair<int, LD>> V1, V2;
    for (auto p :M) {
        if (p.second>0) {
            V2.emplace_back(p.first, p.second);
        }
        if (p.second<0) {
            V1.emplace_back(p.first, -p.second);
        }
    }
    reverse(V2.begin(), V2.end());
    for (auto p: V2) S2.emplace(p);
    
    for (auto p: V1) {
        while(!S2.empty() && S2.top().first<p.first) {
            S1.emplace(S2.top());
            S2.pop();
        }
        
        while (p.second>EPS) {
            if (S1.empty() || S2.empty()) {
                cout<< "NIE" << endl;
                return;
            }
            int dt = S2.top().first - S1.top().first;
            int dt1 = p.first - S1.top().first;
            int dt2 = S2.top().first - p.first;
            
            if (S1.top().second*dt > p.second*dt2 && S2.top().second*dt > p.second*dt1) {
                S1.top().second-=p.second*dt2/dt;
                S2.top().second-=p.second*dt1/dt;
                p.second=0;
            } else if (S1.top().second*dt1 < S2.top().second*dt2) {
                S2.top().second-=S1.top().second*dt1/dt2;
                p.second-=S1.top().second*dt/dt2;
                S1.pop();
            } else {
                S1.top().second-=S2.top().second*dt2/dt1;
                p.second-=S2.top().second*dt/dt1;
                S2.pop();
            }
        }
    }
    cout << "TAK" << endl;
    
//     LD e=0;
//     LD l=0;
//     for (auto p :M) {
//         if (fabs(p.second) > 0.1) {
// //            V.push_back(p);
//             if (p.second < 0) {
//                 e-=p.first * p.second;
//                 l-=p.second;
//             } else {
//                 
//                 
//                 
//             }
//         }
//     }
//     for (auto p
    
//     vector<LD,LD> V2;
//     for (int i=0, j; i<(int)V.size(); i=j) {
//         LD tl=0;
//         LD l=0;
//         for (j=i; j<(int)V.size() && ((V[i].second > 0) == (V[j].second > 0)); j++) {
//             tl+= (LD) V[j].first*V[j].second;
//             l+=V[j].second;
//         }
//         tl/=l;
//         V2.emplace_back(tl,l);
//     }
//     
    
    
    
    
}


int main() {
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while (t--) {
        test();
    }
    return 0;
}