/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main
(String args
[]) { int[] a = new int[]{100, 2, 3, 1, 4, -10, 5, 10, 21, 6, 8, -2020, 2000000000, 2000000001};
System.
out.
println(findFirstPositiveMissingNumber
(a
));
a = new int[]{2, 3, 1, 4, 6, 5, 7};
System.
out.
println(findFirstPositiveMissingNumber
(a
)); }
static int findFirstPositiveMissingNumber(int[] a) {
int min = -1;
java.util.Set<Integer> set = new java.util.HashSet<Integer>(a.length);
for (int integer: a) {
set.add(integer);
if (integer > 0 && (integer < min || min == -1))
min = integer;
}
if (min < 0 || min > 1) return 1;
int current = min;
while (set.contains(current)) current++;
return current;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICBpbnRbXSBhID0gbmV3IGludFtdezEwMCwgMiwgMywgMSwgNCwgLTEwLCA1LCAxMCwgMjEsIDYsIDgsIC0yMDIwLCAyMDAwMDAwMDAwLCAyMDAwMDAwMDAxfTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmluZEZpcnN0UG9zaXRpdmVNaXNzaW5nTnVtYmVyKGEpKTsKICAgICAgICAKICAgICAgICBhID0gbmV3IGludFtdezIsIDMsIDEsIDQsIDYsIDUsIDd9OwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmaW5kRmlyc3RQb3NpdGl2ZU1pc3NpbmdOdW1iZXIoYSkpOwogICAgfQogICAgCiAgICBzdGF0aWMgaW50IGZpbmRGaXJzdFBvc2l0aXZlTWlzc2luZ051bWJlcihpbnRbXSBhKSB7CiAgICAgICAgaW50IG1pbiA9IC0xOwogICAgICAgIGphdmEudXRpbC5TZXQ8SW50ZWdlcj4gc2V0ID0gbmV3IGphdmEudXRpbC5IYXNoU2V0PEludGVnZXI+KGEubGVuZ3RoKTsgCiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaW50ZWdlcjogYSkgewogICAgICAgICAgICBzZXQuYWRkKGludGVnZXIpOwogICAgICAgICAgICBpZiAoaW50ZWdlciA+IDAgJiYgKGludGVnZXIgPCBtaW4gfHwgbWluID09IC0xKSkgCiAgICAgICAgICAgICAgICBtaW4gPSBpbnRlZ2VyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAobWluIDwgMCB8fCBtaW4gPiAxKSByZXR1cm4gMTsKICAgICAgICAKICAgICAgICBpbnQgY3VycmVudCA9IG1pbjsKICAgICAgICB3aGlsZSAoc2V0LmNvbnRhaW5zKGN1cnJlbnQpKSBjdXJyZW50Kys7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICB9Cn0=