#include <iostream>
#include <vector>
#include <sstream>
#include <cassert>
void Rec(std::vector<int>& arr, int k, int start, int depth, std::vector<int>& indices) {
int n = arr.size();
if (depth == k) {
int sum = 0;
for (int idx : indices) {
sum += arr[idx];
}
if (sum == 0) {
for (int idx : indices) {
std::cout << idx << " ";
}
std::cout << std::endl;
}
return;
}
for (int i = start; i < n; ++i) {
indices.push_back(i);
Rec(arr, k, i + 1, depth + 1, indices);
indices.pop_back();
}
}
void findSubarrays(std::vector<int>& arr, int k) {
std::vector<int> indices;
Rec(arr, k, 0, 0, indices);
}
std::string captureOutput(std::vector<int> arr, int k) {
std::ostringstream buffer;
std::streambuf* prevcoutbuf = std::cout.rdbuf(buffer.rdbuf());
//buffer — строковый поток, куда будет направляться вывод вместо std::cout.
//prevcoutbuf сохраняет стандартный поток вывода, чтобы потом его вернуть.
findSubarrays(arr, k);
std::cout.rdbuf(prevcoutbuf);
return buffer.str();
}
void runTests() {
// Все нули
{
std::vector<int> arr = {0, 0, 0};
int k = 2;
std::string output = captureOutput(arr, k);
assert(!output.empty() && "Test 1 failed");
}
// Нет подмножеств с суммой 0
{
std::vector<int> arr = {1, 2, 3};
int k = 2;
std::string output = captureOutput(arr, k);
assert(output.empty() && "Test 2 failed");
}
// Есть подмножество с суммой 0
{
std::vector<int> arr = {1, -1, 2, -2};
int k = 2;
std::string output = captureOutput(arr, k);
assert(!output.empty() && "Test 3 failed");
}
// Один элемент 0
{
std::vector<int> arr = {0};
int k = 1;
std::string output = captureOutput(arr, k);
assert(!output.empty() && "Test 4 failed");
}
// Большие значения
{
std::vector<int> arr = {1000000, -1000000, 500000, -500000};
int k = 2;
std::string output = captureOutput(arr, k);
assert(!output.empty() && "Test 5 failed");
}
// Пустой массив
{
std::vector<int> arr = {};
int k = 1;
std::string output = captureOutput(arr, k);
assert(output.empty() && "Test 6 failed");
}
// k больше, чем размер массива
{
std::vector<int> arr = {1, -1};
int k = 3;
std::string output = captureOutput(arr, k);
assert(output.empty() && "Test 7 failed");
}
std::cout << "All tests passed!\n";
}
int main() {
runTests();
int n, k;
std::cin >> n;
std::cin >> k;
std::vector<int> arr(n);
for (int i = 0; i < n; ++i) {
std::cin >> arr[i];
}
findSubarrays(arr, k);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGNhc3NlcnQ+Cgp2b2lkIFJlYyhzdGQ6OnZlY3RvcjxpbnQ+JiBhcnIsIGludCBrLCBpbnQgc3RhcnQsIGludCBkZXB0aCwgc3RkOjp2ZWN0b3I8aW50PiYgaW5kaWNlcykgewogICAgaW50IG4gPSBhcnIuc2l6ZSgpOwogICAgaWYgKGRlcHRoID09IGspIHsKICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICBmb3IgKGludCBpZHggOiBpbmRpY2VzKSB7CiAgICAgICAgICAgIHN1bSArPSBhcnJbaWR4XTsKICAgICAgICB9CiAgICAgICAgaWYgKHN1bSA9PSAwKSB7CiAgICAgICAgICAgIGZvciAoaW50IGlkeCA6IGluZGljZXMpIHsKICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBpZHggPDwgIiAiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IG47ICsraSkgewogICAgICAgIGluZGljZXMucHVzaF9iYWNrKGkpOwogICAgICAgIFJlYyhhcnIsIGssIGkgKyAxLCBkZXB0aCArIDEsIGluZGljZXMpOwogICAgICAgIGluZGljZXMucG9wX2JhY2soKTsKICAgIH0KfQoKdm9pZCBmaW5kU3ViYXJyYXlzKHN0ZDo6dmVjdG9yPGludD4mIGFyciwgaW50IGspIHsKICAgIHN0ZDo6dmVjdG9yPGludD4gaW5kaWNlczsKICAgIFJlYyhhcnIsIGssIDAsIDAsIGluZGljZXMpOwp9CgpzdGQ6OnN0cmluZyBjYXB0dXJlT3V0cHV0KHN0ZDo6dmVjdG9yPGludD4gYXJyLCBpbnQgaykgewogICAgc3RkOjpvc3RyaW5nc3RyZWFtIGJ1ZmZlcjsKICAgIHN0ZDo6c3RyZWFtYnVmKiBwcmV2Y291dGJ1ZiA9IHN0ZDo6Y291dC5yZGJ1ZihidWZmZXIucmRidWYoKSk7CiAgICAvL2J1ZmZlciDigJQg0YHRgtGA0L7QutC+0LLRi9C5INC/0L7RgtC+0LosINC60YPQtNCwINCx0YPQtNC10YIg0L3QsNC/0YDQsNCy0LvRj9GC0YzRgdGPINCy0YvQstC+0LQg0LLQvNC10YHRgtC+IHN0ZDo6Y291dC4KICAgIC8vcHJldmNvdXRidWYg0YHQvtGF0YDQsNC90Y/QtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0L/QvtGC0L7QuiDQstGL0LLQvtC00LAsINGH0YLQvtCx0Ysg0L/QvtGC0L7QvCDQtdCz0L4g0LLQtdGA0L3Rg9GC0YwuCiAgICBmaW5kU3ViYXJyYXlzKGFyciwgayk7CiAgICBzdGQ6OmNvdXQucmRidWYocHJldmNvdXRidWYpOwogICAgcmV0dXJuIGJ1ZmZlci5zdHIoKTsKfQoKdm9pZCBydW5UZXN0cygpIHsKICAgIC8vINCS0YHQtSDQvdGD0LvQuAogICAgewogICAgICAgIHN0ZDo6dmVjdG9yPGludD4gYXJyID0gezAsIDAsIDB9OwogICAgICAgIGludCBrID0gMjsKICAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXQgPSBjYXB0dXJlT3V0cHV0KGFyciwgayk7CiAgICAgICAgYXNzZXJ0KCFvdXRwdXQuZW1wdHkoKSAmJiAiVGVzdCAxIGZhaWxlZCIpOwogICAgfQogICAgCiAgICAvLyDQndC10YIg0L/QvtC00LzQvdC+0LbQtdGB0YLQsiDRgSDRgdGD0LzQvNC+0LkgMAogICAgewogICAgICAgIHN0ZDo6dmVjdG9yPGludD4gYXJyID0gezEsIDIsIDN9OwogICAgICAgIGludCBrID0gMjsKICAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXQgPSBjYXB0dXJlT3V0cHV0KGFyciwgayk7CiAgICAgICAgYXNzZXJ0KG91dHB1dC5lbXB0eSgpICYmICJUZXN0IDIgZmFpbGVkIik7CiAgICB9CiAgICAKICAgIC8vINCV0YHRgtGMINC/0L7QtNC80L3QvtC20LXRgdGC0LLQviDRgSDRgdGD0LzQvNC+0LkgMAogICAgewogICAgICAgIHN0ZDo6dmVjdG9yPGludD4gYXJyID0gezEsIC0xLCAyLCAtMn07CiAgICAgICAgaW50IGsgPSAyOwogICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dCA9IGNhcHR1cmVPdXRwdXQoYXJyLCBrKTsKICAgICAgICBhc3NlcnQoIW91dHB1dC5lbXB0eSgpICYmICJUZXN0IDMgZmFpbGVkIik7CiAgICB9CiAgICAKICAgIC8vINCe0LTQuNC9INGN0LvQtdC80LXQvdGCIDAKICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGFyciA9IHswfTsKICAgICAgICBpbnQgayA9IDE7CiAgICAgICAgc3RkOjpzdHJpbmcgb3V0cHV0ID0gY2FwdHVyZU91dHB1dChhcnIsIGspOwogICAgICAgIGFzc2VydCghb3V0cHV0LmVtcHR5KCkgJiYgIlRlc3QgNCBmYWlsZWQiKTsKICAgIH0KICAgIAogICAgLy8gINCR0L7Qu9GM0YjQuNC1INC30L3QsNGH0LXQvdC40Y8KICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGFyciA9IHsxMDAwMDAwLCAtMTAwMDAwMCwgNTAwMDAwLCAtNTAwMDAwfTsKICAgICAgICBpbnQgayA9IDI7CiAgICAgICAgc3RkOjpzdHJpbmcgb3V0cHV0ID0gY2FwdHVyZU91dHB1dChhcnIsIGspOwogICAgICAgIGFzc2VydCghb3V0cHV0LmVtcHR5KCkgJiYgIlRlc3QgNSBmYWlsZWQiKTsKICAgIH0KICAgIAogICAgLy8g0J/Rg9GB0YLQvtC5INC80LDRgdGB0LjQsgogICAgewogICAgICAgIHN0ZDo6dmVjdG9yPGludD4gYXJyID0ge307CiAgICAgICAgaW50IGsgPSAxOwogICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dCA9IGNhcHR1cmVPdXRwdXQoYXJyLCBrKTsKICAgICAgICBhc3NlcnQob3V0cHV0LmVtcHR5KCkgJiYgIlRlc3QgNiBmYWlsZWQiKTsKICAgIH0KICAgIAogICAgLy8gayDQsdC+0LvRjNGI0LUsINGH0LXQvCDRgNCw0LfQvNC10YAg0LzQsNGB0YHQuNCy0LAKICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IGFyciA9IHsxLCAtMX07CiAgICAgICAgaW50IGsgPSAzOwogICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dCA9IGNhcHR1cmVPdXRwdXQoYXJyLCBrKTsKICAgICAgICBhc3NlcnQob3V0cHV0LmVtcHR5KCkgJiYgIlRlc3QgNyBmYWlsZWQiKTsKICAgIH0KICAgIAogICAgc3RkOjpjb3V0IDw8ICJBbGwgdGVzdHMgcGFzc2VkIVxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBydW5UZXN0cygpOwoKICAgIGludCBuLCBrOwogICAgc3RkOjpjaW4gPj4gbjsKICAgIHN0ZDo6Y2luID4+IGs7CgogICAgc3RkOjp2ZWN0b3I8aW50PiBhcnIobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIHN0ZDo6Y2luID4+IGFycltpXTsKICAgIH0KICAgIGZpbmRTdWJhcnJheXMoYXJyLCBrKTsKfQo=