#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin(), x.end()
#define pb push_back
#define FOR(i,a,b) for(int i = (a); i < (b); ++i)
#define ROF(i,a,b) for(int i = (a); i >= (b); --i)
#define trav(a,x) for(auto& a: x)
#define sz(x) (int)x.size()
template<class T> bool ckmax(T& a, const T& b){return a<b?a=b,1:0;}
template<typename T> ostream& operator<<(ostream& out, vector<T>& a) {for(auto &x : a) out << x << ' '; return out;};
void solve() {
int n; cin >> n;
vector<vector<int>> g(n), relevant;
int max_k = 0;
FOR(i,0,n){
int k; cin >> k;
g[i].resize(k);
ckmax(max_k, k);
FOR(j,0,k){
cin >> g[i][j];
if(sz(relevant) == j) relevant.pb({});
relevant[j].pb(i);
}
}
vector<int> lex_min(max_k), rank(n, -1);
ROF(i,max_k-1,0){
vector<array<int, 3>> cur;
trav(j, relevant[i]){
cur.pb({g[j][i], rank[j], j});
}
sort(all(cur));
lex_min[i] = cur[0][2];
int rk = 0;
trav(j, cur) rank[j[2]] = rk++;
}
vector<int> ans;
while(sz(ans) < max_k){
int tmp = sz(ans);
auto& v = g[lex_min[tmp]];
FOR(i,tmp,sz(v)) ans.pb(v[i]);
}
assert(sz(ans) == max_k);
cout << ans << "\n";
}
signed main() {
cin.tie(0) -> sync_with_stdio(0);
int t = 1;
cin >> t;
for(int test = 1; test <= t; test++){
solve();
}
}
/* /\_/\
* (= ._.)
* / > \>
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGkgPSAoYSk7IGkgPCAoYik7ICsraSkKI2RlZmluZSBST0YoaSxhLGIpIGZvcihpbnQgaSA9IChhKTsgaSA+PSAoYik7IC0taSkKI2RlZmluZSB0cmF2KGEseCkgZm9yKGF1dG8mIGE6IHgpCiNkZWZpbmUgc3ooeCkgKGludCl4LnNpemUoKQp0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGNrbWF4KFQmIGEsIGNvbnN0IFQmIGIpe3JldHVybiBhPGI/YT1iLDE6MDt9CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3V0LCB2ZWN0b3I8VD4mIGEpIHtmb3IoYXV0byAmeCA6IGEpIG91dCA8PCB4IDw8ICcgJzsgcmV0dXJuIG91dDt9OwogCnZvaWQgc29sdmUoKSB7CglpbnQgbjsgY2luID4+IG47Cgl2ZWN0b3I8dmVjdG9yPGludD4+IGcobiksIHJlbGV2YW50OwoJaW50IG1heF9rID0gMDsKCUZPUihpLDAsbil7CgkJaW50IGs7IGNpbiA+PiBrOwoJCWdbaV0ucmVzaXplKGspOwoJCWNrbWF4KG1heF9rLCBrKTsKCQlGT1IoaiwwLGspewoJCQljaW4gPj4gZ1tpXVtqXTsKCQkJaWYoc3oocmVsZXZhbnQpID09IGopIHJlbGV2YW50LnBiKHt9KTsKCQkJcmVsZXZhbnRbal0ucGIoaSk7CgkJfQoJfQoJdmVjdG9yPGludD4gbGV4X21pbihtYXhfayksIHJhbmsobiwgLTEpOwoJUk9GKGksbWF4X2stMSwwKXsKCQl2ZWN0b3I8YXJyYXk8aW50LCAzPj4gY3VyOwoJCXRyYXYoaiwgcmVsZXZhbnRbaV0pewoJCQljdXIucGIoe2dbal1baV0sIHJhbmtbal0sIGp9KTsKCQl9CgkJc29ydChhbGwoY3VyKSk7CgkJbGV4X21pbltpXSA9IGN1clswXVsyXTsKCQlpbnQgcmsgPSAwOwoJCXRyYXYoaiwgY3VyKSByYW5rW2pbMl1dID0gcmsrKzsKCX0KCXZlY3RvcjxpbnQ+IGFuczsKCXdoaWxlKHN6KGFucykgPCBtYXhfayl7CgkJaW50IHRtcCA9IHN6KGFucyk7CgkJYXV0byYgdiA9IGdbbGV4X21pblt0bXBdXTsKCQlGT1IoaSx0bXAsc3oodikpIGFucy5wYih2W2ldKTsKCX0KCWFzc2VydChzeihhbnMpID09IG1heF9rKTsKCWNvdXQgPDwgYW5zIDw8ICJcbiI7Cn0KIApzaWduZWQgbWFpbigpIHsKCWNpbi50aWUoMCkgLT4gc3luY193aXRoX3N0ZGlvKDApOwoJaW50IHQgPSAxOwoJY2luID4+IHQ7Cglmb3IoaW50IHRlc3QgPSAxOyB0ZXN0IDw9IHQ7IHRlc3QrKyl7CgkJc29sdmUoKTsKCX0KfQogCi8qICAgL1xfL1wKKiAgICg9IC5fLikKKiAgIC8gPiAgXD4KKi8=