#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>

using namespace std;

// Hàm gộp hai dãy đã sắp xếp
vector<int> merge2Arrays(const vector<int>& a, const vector<int>& b) {
    int m = a.size(), n = b.size();
    vector<int> res(m + n);
    int i = 0, p = 0, q = 0;

    while (p < m && q < n) {
        if (a[p] <= b[q]) {
            res[i++] = a[p++];
        } else {
            res[i++] = b[q++];
        }
    }

    while (p < m) {
        res[i++] = a[p++];
    }

    while (q < n) {
        res[i++] = b[q++];
    }

    return res;
}

// Hàm gộp k dãy đã sắp xếp
vector<int> mergeKArrays(vector<vector<int>>& arr, int k) {
    vector<int> result = arr[0]; // Bắt đầu từ dãy đầu tiên

    for (int i = 1; i < k; ++i) {
        result = merge2Arrays(result, arr[i]);
    }

    return result;
}

int main() {
    int k;
    cin >> k;
    cin.ignore(); // Bỏ qua ký tự xuống dòng sau khi nhập k

    vector<vector<int>> arr(k);

    for (int i = 0; i < k; ++i) {
        string line;
        getline(cin, line); // Đọc cả dòng
        stringstream ss(line);
        int num;
        while (ss >> num) {
            arr[i].push_back(num);
        }
    }

    vector<int> result = mergeKArrays(arr, k);

    // In kết quả
    for (int x : result) {
        cout << x << " ";
    }
    cout << endl;

    return 0;
}
