//TheFrog
#include <iostream>
using namespace std;
const int MAXN = 209;
const unsigned int MAX_VAL = ~0;
int MAX_VALUE, T, N, data[MAXN][3], d[MAXN][MAXN], selected[MAXN], distan[MAXN], cnt;
void formatData() {
for (int i=1; i<=N; i++) {
selected[i] = distan[i] = 0;
for (int j=1; j<=N; j++) {
d[i][j] = 0;
}
}
}
bool nhay_gan(int x, int y, int xNext, int yNext, int r1, int r2) {
if ((x - xNext) * (x - xNext) + (y - yNext) * (y - yNext) <= (r1 + r2 + 40) * (r1 + r2 + 40)) {
return true;
} else {
return false;
}
}
bool nhay_xa(int x, int y, int xNext, int yNext, int r1, int r2) {
if ((x - xNext) * (x - xNext) + (y - yNext) * (y - yNext) <= (r1 + r2 + 90) * (r1 + r2 + 90)) {
return true;
} else {
return false;
}
}
int main() {
ios::sync_with_stdio(false);
//freopen("input.txt", "r", stdin);
MAX_VALUE = MAX_VAL >> 1;
cin>>T;
for (int tc=1; tc<=T; tc++) {
cin>>N;
formatData();
for (int i=1; i<=N; i++) {
cin>>data[i][0]>>data[i][1]>>data[i][2];
}
for (int i=1; i<=N; i++) {
for (int j=i+1; j<=N; j++) {
if (nhay_gan(data[i][0], data[i][1], data[j][0], data[j][1], data[i][2], data[j][2])) {
d[i][j] = d[j][i] = 1;
} else if (nhay_xa(data[i][0], data[i][1], data[j][0], data[j][1], data[i][2], data[j][2])) {
d[i][j] = d[j][i] = 1000;
} else {
d[i][j] = d[j][i] = MAX_VALUE;
}
}
}
selected[1] = 1;
cnt = 1;
for (int i=1; i<=N; i++) {
distan[i] = d[1][i];
}
while (cnt != N) {
int w=0, dmin = MAX_VALUE;
for (int i=1; i<=N; i++) {
if (distan[i] <= dmin && selected[i] == 0) {
dmin = distan[i];
w = i;
}
}
selected[w] = 1;
cnt++;
for (int j=1; j<=N; j++) {
int d1 = d[w][j] == MAX_VALUE || d[w][j] + distan[w] < 0 ? MAX_VALUE : d[w][j] + distan[w];
distan[j] = min(distan[j], d1);
}
}
//cout<<"Case #"<<tc<<endl;
if (distan[N] == MAX_VALUE) {
cout<<"-1"<<endl;
} else {
cout<<distan[N]/1000<<" "<<distan[N]%1000<<endl;
}
}
}