#include <vector>
#include <iostream>
#include <iomanip>
#include <iterator>
#include <algorithm>
using namespace std;
vector<vector<int>> src =
{
{ 0, 1, -1, 0},
{-1, 0, -1, 1},
{ 0, 0, 0, 0},
{ 1, 1, 1, 0}
};
vector<vector<int>> dest;
void make_tuples(vector<int> s, back_insert_iterator<vector<vector<int>>> d)
{
auto i = find(s.begin(),s.end(),-1);
if (i == s.end())
{
d = s;
return;
}
*i = 0;
make_tuples(s,d);
*i = 1;
make_tuples(s,d);
}
int main(int argc, const char * argv[])
{
for(int i = 0; i < src.size(); ++i)
{
if (any_of(src[i].begin(),src[i].end(),[](int j){ return j == -1; }))
{
make_tuples(src[i],back_inserter(dest));
}
else
dest.push_back(src[i]);
}
for(auto row : dest)
{
for(auto i: row) cout << i << " ";
cout << endl;
}
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3Rvcjx2ZWN0b3I8aW50Pj4gc3JjID0KewogICAgeyAwLCAxLCAtMSwgMH0sCiAgICB7LTEsIDAsIC0xLCAxfSwKICAgIHsgMCwgMCwgIDAsIDB9LAogICAgeyAxLCAxLCAgMSwgMH0KfTsKCnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZGVzdDsKCnZvaWQgbWFrZV90dXBsZXModmVjdG9yPGludD4gcywgYmFja19pbnNlcnRfaXRlcmF0b3I8dmVjdG9yPHZlY3RvcjxpbnQ+Pj4gZCkKewogICAgYXV0byBpID0gZmluZChzLmJlZ2luKCkscy5lbmQoKSwtMSk7CiAgICBpZiAoaSA9PSBzLmVuZCgpKQogICAgewogICAgICAgIGQgPSBzOwogICAgICAgIHJldHVybjsKICAgIH0KICAgICppID0gMDsKICAgIG1ha2VfdHVwbGVzKHMsZCk7CiAgICAqaSA9IDE7CiAgICBtYWtlX3R1cGxlcyhzLGQpOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgZm9yKGludCBpID0gMDsgaSA8IHNyYy5zaXplKCk7ICsraSkKICAgIHsKICAgICAgICBpZiAoYW55X29mKHNyY1tpXS5iZWdpbigpLHNyY1tpXS5lbmQoKSxbXShpbnQgail7IHJldHVybiBqID09IC0xOyB9KSkKICAgICAgICB7CiAgICAgICAgICAgIG1ha2VfdHVwbGVzKHNyY1tpXSxiYWNrX2luc2VydGVyKGRlc3QpKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICBkZXN0LnB1c2hfYmFjayhzcmNbaV0pOwogICAgfQoKICAgIGZvcihhdXRvIHJvdyA6IGRlc3QpCiAgICB7CiAgICAgICAgZm9yKGF1dG8gaTogcm93KSBjb3V0IDw8IGkgPDwgIiAgIjsKICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9Cgp9CgoK