#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

int n, l;

vector <int> v[1001];

int moguce[1001];
int mogucen;

int pos[1001];
int g, mini;

bool odlucio, jedinstveno;
int mini2 = 999999999, mini2id;

int main(void) {
	memset(pos, 0, sizeof(pos));
	scanf("%d", &n);

	for(int i = 0; i < n; ++i) {
		scanf("%d", &l);
		v[i].resize(l);
		for(int j = 0; j < l; ++j) scanf("%d", &v[i][j]);
	}

	for(;;) {
		g = 0;
		mini = 999999999;
		mogucen = 1;

		for(int i = 0; i < n; ++i) {                
			if (pos[i] == v[i].size()) ++g; 
			else {
				if (mini == v[i][pos[i]]) {
					++mogucen;
					moguce[mogucen - 1] = i;
                } else if (v[i][pos[i]] < mini) {
					mini = v[i][pos[i]];
					mogucen = 1;
					moguce[0] = i;
				}
			}		
		}
          
		if (g == n) break;
		
		if (mogucen == 1) {
			printf("%d ", mini);
			++pos[moguce[0]];
        } else {	
			odlucio = false;

			for(int c = 1;!odlucio;++c) {
				mini2 = 999999999;
				jedinstveno = false;

				for (int i = 0; i < mogucen && !odlucio; ++i) {				
					if (pos[moguce[i]] + c >= v[moguce[i]].size()) {
						printf("%d ", mini);
						++pos[moguce[i]];
						odlucio = true;
						break;
					}

					if (v[moguce[i]][pos[moguce[i]] + c] == mini2) {
						jedinstveno = false;
					}


					if (v[moguce[i]][pos[moguce[i]] + c] < mini2) {
						mini2 = v[moguce[i]][pos[moguce[i]] + c];
						mini2id = moguce[i];
						jedinstveno = true;
					}
					
				}

				if (jedinstveno && !odlucio) {
					printf("%d ", mini);
					++pos[moguce[mini2id]];
					odlucio = true;
					break;
				}
			}
		}
	}
	
	//system("pause");
	return 0;
}
