#include #define endl '\n' #define int long long int using namespace std; using namespace std::chrono; signed main() { #ifdef ONLINE_JUDGE /// promeni freopen("star.in", "r", stdin); freopen("star.out", "w", stdout); #endif auto start = high_resolution_clock::now(); int n, m; cin >> n >> m; vector c(n); for (int i = 0; i < n; ++i) { cin >> c[i]; } vector> scenes(m); for (int i = 0; i < m; ++i) { int br; cin >> br; scenes[i].resize(br); for (int j = 0; j < br; ++j) { cin >> scenes[i][j]; scenes[i][j]--; } } vector permutation(m); for (int i = 0; i < m; ++i) { permutation[i] = i; } int min_cost = LLONG_MAX; vector best_permutation; while(true) { random_shuffle(permutation.begin(), permutation.end()); int current_cost = 0; vector start_time(n, -1); vector end_time(n, -1); for (int i = 0; i < m; ++i) { int scene_index = permutation[i]; for (int actor : scenes[scene_index]) { if (start_time[actor] == -1) { start_time[actor] = i; } end_time[actor] = i; } } for (int i = 0; i < n; ++i) { if(start_time[i] != -1) current_cost += (end_time[i] - start_time[i] + 1) * c[i]; } if (current_cost < min_cost) { min_cost = current_cost; best_permutation = permutation; } auto stop = high_resolution_clock::now(); auto duration = duration_cast(stop - start); if(duration.count() >= 5000)break; } for (int i = 0; i < m; ++i) { cout << best_permutation[i] + 1 << " "; } cout << endl; return 0; }