#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int calcVal(vector all) { int res = 0; for (auto i : all) { res += (i*i); } return res; } void print(int id) { ofstream myfile2; myfile2.open("subsetselection.out"); myfile2 << __builtin_popcount(id) << "\n"; int cnt = 1; while (id > 0) { if (id & 1) { myfile2 << cnt << "\n"; } id /= 2; cnt++; } } int main() { int n, m, b; ifstream myfile; myfile.open("subsetselection.in"); myfile >> n >> m >> b; vector> all(n); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { int x; myfile >> x; all[i].push_back(x); } } int maxi = 0; int id = 0; for (int i = 0; i <= (1 << (n)); i++) { vector res(n); for (int j = 0; j < n; j++) { if (i & (1 << j)) { int curr = 0; for (int k = 0; k < m; k++) { res[k] += all[j][k]; res[k] %= b; } } } int val = calcVal(res); if (val > maxi) { maxi = val; id = i; } } print(id); }