import java.util.*;
class TripletsToZero{
public static void main
(String[]args
){ //[-2,-2,4] [-2,-1,3] [-2,0,2] [-2,1,1] [-1,-1,2] [-1,0,1] [0,0,0]
printTriplets(new int[] {-2, -2, -1, -1, -1, -1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 4});
//[-4,-2,6] [-4,0,4] [-4,1,3] [-4,2,2] [-2,-2,4] [-2,0,2]
printTriplets(new int[] {-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6});
}
private static void printTriplets(int[] arr){
int nonNegStartIdx = findNonNegStartIdx(arr);
if (nonNegStartIdx < 1) return;
for(int i = 0; i <= nonNegStartIdx;){
for(int j = i+1, k = arr.length-1; j < k && k >= nonNegStartIdx;){
int sum = arr[i]+arr[j]+arr[k];
if (sum < 0){
++j;
continue;
} else if (sum > 0){
--k;
continue;
} else {
System.
out.
printf("[%d,%d,%d]\n", arr
[i
], arr
[j
], arr
[k
]); for(--k; k >= nonNegStartIdx && arr[k+1] == arr[k]; --k);
for(++j; j < k && arr[j-1] == arr[j]; ++j);
}
}
for(++i; i <= nonNegStartIdx && arr[i]==arr[i-1]; ++i);
}
}
private static int findNonNegStartIdx(int[]arr){
for(int i = 0; i < arr.length; ++i){
if (arr[i] >= 0) return i;
}
return -1;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwpjbGFzcyBUcmlwbGV0c1RvWmVyb3sKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXWFyZ3MpewogICAgLy9bLTIsLTIsNF0gWy0yLC0xLDNdIFstMiwwLDJdIFstMiwxLDFdIFstMSwtMSwyXSBbLTEsMCwxXSBbMCwwLDBdCiAgICBwcmludFRyaXBsZXRzKG5ldyBpbnRbXSB7LTIsIC0yLCAtMSwgLTEsIC0xLCAtMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMywgNH0pOwogICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAvL1stNCwtMiw2XSBbLTQsMCw0XSBbLTQsMSwzXSBbLTQsMiwyXSBbLTIsLTIsNF0gWy0yLDAsMl0KICAgIHByaW50VHJpcGxldHMobmV3IGludFtdIHstNCwtMiwtMiwtMiwwLDEsMiwyLDIsMywzLDQsNCw2LDZ9KTsKICB9CiAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFRyaXBsZXRzKGludFtdIGFycil7CiAgICBBcnJheXMuc29ydChhcnIpOwogICAgaW50IG5vbk5lZ1N0YXJ0SWR4ID0gZmluZE5vbk5lZ1N0YXJ0SWR4KGFycik7CiAgICBpZiAobm9uTmVnU3RhcnRJZHggPCAxKSByZXR1cm47CgogICAgZm9yKGludCBpID0gMDsgaSA8PSBub25OZWdTdGFydElkeDspewogICAgICBmb3IoaW50IGogPSBpKzEsIGsgPSBhcnIubGVuZ3RoLTE7IGogPCBrICYmIGsgPj0gbm9uTmVnU3RhcnRJZHg7KXsKICAgICAgICBpbnQgc3VtID0gYXJyW2ldK2FycltqXSthcnJba107CiAgICAgICAgaWYgKHN1bSA8IDApewogICAgICAgICAgKytqOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfSBlbHNlIGlmIChzdW0gPiAwKXsKICAgICAgICAgIC0tazsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiWyVkLCVkLCVkXVxuIiwgYXJyW2ldLCBhcnJbal0sIGFycltrXSk7CiAgICAgICAgICBmb3IoLS1rOyBrID49IG5vbk5lZ1N0YXJ0SWR4ICYmIGFycltrKzFdID09IGFycltrXTsgLS1rKTsKICAgICAgICAgIGZvcigrK2o7IGogPCBrICYmIGFycltqLTFdID09IGFycltqXTsgKytqKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yKCsraTsgaSA8PSBub25OZWdTdGFydElkeCAmJiBhcnJbaV09PWFycltpLTFdOyArK2kpOwogICAgfQogIH0KICBwcml2YXRlIHN0YXRpYyBpbnQgZmluZE5vbk5lZ1N0YXJ0SWR4KGludFtdYXJyKXsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpewogICAgICBpZiAoYXJyW2ldID49IDApIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KfQ==