#include <algorithm>
#include <string>
#include <iostream>
#include <vector>
std::vector<std::vector<int>> threeSum(std::vector<int>& nums) {
std::sort(nums.begin(), nums.end());
std::vector<std::vector<int>> res;
for (auto it = nums.begin(); it != nums.end(); ++it) {
auto left = it + 1;
auto right = nums.rbegin();
while (left < right.base()) {
auto sum = *it + *left + *right;
if (sum < 0) {
++left;
} else if (sum > 0) {
++right;
} else {
res.push_back({*it, *left, *right});
std::cout << *it << " " << *left << " " << *right << std::endl;
++left;
++right;
}
}
}
return res;
}
int main()
{
std::vector<int> v {4, 2, -6, 42, -42, 0, 21, 21};
threeSum(v);
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8aW50Pj4gdGhyZWVTdW0oc3RkOjp2ZWN0b3I8aW50PiYgbnVtcykgewogICAgc3RkOjpzb3J0KG51bXMuYmVnaW4oKSwgbnVtcy5lbmQoKSk7CiAgICAKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGludD4+IHJlczsKICAgIGZvciAoYXV0byBpdCA9IG51bXMuYmVnaW4oKTsgaXQgIT0gbnVtcy5lbmQoKTsgKytpdCkgewogICAgICAgIGF1dG8gbGVmdCA9IGl0ICsgMTsKICAgICAgICBhdXRvIHJpZ2h0ID0gbnVtcy5yYmVnaW4oKTsKICAgICAgICB3aGlsZSAobGVmdCA8IHJpZ2h0LmJhc2UoKSkgewogICAgICAgICAgICBhdXRvIHN1bSA9ICppdCArICpsZWZ0ICsgKnJpZ2h0OwogICAgICAgICAgICBpZiAoc3VtIDwgMCkgewogICAgICAgICAgICAgICAgKytsZWZ0OyAgIAogICAgICAgICAgICB9IGVsc2UgaWYgKHN1bSA+IDApIHsKICAgICAgICAgICAgICAgICsrcmlnaHQ7ICAgCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXMucHVzaF9iYWNrKHsqaXQsICpsZWZ0LCAqcmlnaHR9KTsKICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAqaXQgPDwgIiAiIDw8ICAqbGVmdCA8PCAiICIgPDwgKnJpZ2h0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICsrbGVmdDsKICAgICAgICAgICAgICAgICsrcmlnaHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dmVjdG9yPGludD4gdiB7NCwgMiwgLTYsIDQyLCAtNDIsIDAsIDIxLCAyMX07CiAgICB0aHJlZVN1bSh2KTsKfQo=