#include <bits/stdc++.h>
using namespace std;
struct Data {
int i, j, c;
Data() {};
Data(int i_, int j_, int c_) : i(i_), j(j_), c(c_) {};
};
bool operator <(Data a, Data b) {
return a.c < b.c;
}
priority_queue<Data> q;
vector<int> findHighestSums(vector< vector<int> > lists, int n) {
int L = (int) lists.size();
vector<int> ans;
for (int i = 1; i < L; ++i) {
while (! q.empty()) q.pop();
for (int j = 0; j < lists[i].size(); ++j) {
q.push(Data(0, j, lists[0][0] + lists[i][j]));
}
for (int j = 0; j < n && ! q.empty(); ++j) {
Data k = q.top(); q.pop();
ans.push_back(k.c);
if (k.i + 1 < lists[0].size()) {
q.push(Data(k.i + 1, k.j, lists[0][k.i + 1] + lists[i][k.j]));
}
}
lists[0] = ans;
ans.clear();
}
return lists[0];
}
int main() {
int n = 5;
vector< vector<int> > a(5);
a[0] = {5,4,3,2,1};
a[1] = {4,1};
a[2] = {5,0,0};
a[3] = {6,4,2};
a[4] = {1};
vector<int> ans = findHighestSums(a, n);
for (int i = 0; i < ans.size(); ++i)
cout << ans[i] << ' ';
cout << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IERhdGEgewoJaW50IGksIGosIGM7CglEYXRhKCkge307CglEYXRhKGludCBpXywgaW50IGpfLCBpbnQgY18pIDogaShpXyksIGooal8pLCBjKGNfKSB7fTsKfTsKYm9vbCBvcGVyYXRvciA8KERhdGEgYSwgRGF0YSBiKSB7CglyZXR1cm4gYS5jIDwgYi5jOwp9Cgpwcmlvcml0eV9xdWV1ZTxEYXRhPiBxOwoKdmVjdG9yPGludD4gZmluZEhpZ2hlc3RTdW1zKHZlY3RvcjwgdmVjdG9yPGludD4gPiBsaXN0cywgaW50IG4pIHsKCWludCBMID0gKGludCkgbGlzdHMuc2l6ZSgpOwoJdmVjdG9yPGludD4gYW5zOwoJZm9yIChpbnQgaSA9IDE7IGkgPCBMOyArK2kpIHsKCQl3aGlsZSAoISBxLmVtcHR5KCkpIHEucG9wKCk7CgkJZm9yIChpbnQgaiA9IDA7IGogPCBsaXN0c1tpXS5zaXplKCk7ICsraikgewoJCQlxLnB1c2goRGF0YSgwLCBqLCBsaXN0c1swXVswXSArIGxpc3RzW2ldW2pdKSk7CgkJfQoJCWZvciAoaW50IGogPSAwOyBqIDwgbiAmJiAhIHEuZW1wdHkoKTsgKytqKSB7CgkJCURhdGEgayA9IHEudG9wKCk7IHEucG9wKCk7CgkJCWFucy5wdXNoX2JhY2soay5jKTsKCQkJaWYgKGsuaSArIDEgPCBsaXN0c1swXS5zaXplKCkpIHsKCQkJCXEucHVzaChEYXRhKGsuaSArIDEsIGsuaiwgbGlzdHNbMF1bay5pICsgMV0gKyBsaXN0c1tpXVtrLmpdKSk7CgkJCX0KCQl9CgkJbGlzdHNbMF0gPSBhbnM7CgkJYW5zLmNsZWFyKCk7Cgl9CglyZXR1cm4gbGlzdHNbMF07Cn0KCmludCBtYWluKCkgewoJaW50IG4gPSA1OwoJCgl2ZWN0b3I8IHZlY3RvcjxpbnQ+ID4gYSg1KTsKCWFbMF0gPSB7NSw0LDMsMiwxfTsKCWFbMV0gPSB7NCwxfTsKCWFbMl0gPSB7NSwwLDB9OwoJYVszXSA9IHs2LDQsMn07CglhWzRdID0gezF9OwoJdmVjdG9yPGludD4gYW5zID0gZmluZEhpZ2hlc3RTdW1zKGEsIG4pOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBhbnMuc2l6ZSgpOyArK2kpCgkJY291dCA8PCBhbnNbaV0gPDwgJyAnOwoJY291dCA8PCAnXG4nOwoJcmV0dXJuIDA7Cn0K