#include #include #include using namespace std; #define DEB(x) cout << #x << " = " << x << endl; int main(void) { int n, k; while (scanf("%d %d", &n, &k) == 2) { vector > > samps; samps.reserve(n); for (int i = 0; i < n; i++) { set samp; int samcnt; scanf("%d", &samcnt); int samx; for (int j = 0; j < samcnt; j++) { scanf("%d", &samx); samp.insert(samx); } samps.push_back(make_pair(samcnt, samp)); } int best = -1; for (int i = 0; i < n; i++) { set mame(samps[i].second.begin(), samps[i].second.end()); int cnt = samps[i].first; int j = (i + 1) % n; while (j != i && mame.size() < k) { mame.insert(samps[j].second.begin(), samps[j].second.end()); cnt += samps[j].first; j = (j + 1) % n; } if (i == 0 && mame.size() < k) { best = -1; break; } if (best == -1 || best > cnt) { best = cnt; } } printf("%d\n", best); /* for (auto& p: samps) { DEB(p.first) cout << "brands" << endl; for (auto& s : p.second) { DEB(s) } cout << endl; } cout << "END" << endl; */ } return 0; }