Problem:
ねこのあな

　
あなたの家の近所には多くの猫が出入りする横穴があります。中は行き止まりで通り抜けることはできませんが、近所の猫が全部入れるくらいの奥行きがあります。穴の幅は猫がちょうど収まるくらいなので、先に入った猫を後から入った猫が押しのけて奥に向かうことはできません。また、先に入った猫が、後から入ってきた猫を押しのけて出口から出ることもできません。

猫好きのあなたは横穴に出入りする猫を順番に記録していきました。記録をはじめたときは横穴の中には一匹も猫はいませんでしたが、やがて猫たちは横穴への出入りを始めました。同じ猫が何度も出入りすることもありました。

記録を終えたあなたは、正しく記録できたかプログラムを書いてチェックすることにしました。

横穴に出入りした猫のリストが与えられる。リストを先頭から順に見ていったとき、それより後ろを見なくても誤りと判断できる最初の位置を求めるプログラムを作成せよ。ただし、猫は100匹いて、1から100までの番号が与えられているものとする。

入力

入力は以下の形式で与えられる。

$L$
$c_1$ $c_2$ ... $c_L$

１行目に横穴に出入りした猫のリストの長さ$L$ ($1 \leq L \leq 1000$)が与えられる。続く１行に、$i$番目に横穴に出入りした猫の情報$c_i$ ($-100 \leq c_i \leq 100$, ただし$c_i≠0$)が与えられる。ただし、$i$番目に出入りした猫の番号が$a$で、その猫が横穴に入ったときは$c_i=a$、横穴から出たときは$c_i=-a$である。

出力

リストを先頭から順に見ていったとき、それより後ろを見なくても誤りと判断できる最初の位置を１行に出力する。誤りがない場合は、「OK」を１行に出力する。

入出力例

入力例１

4
1 2 -3 -1

出力例１

3

入力例２

6
2 1 2 -2 -1 -2

出力例２

3

入力例３

5
2 1 -1 3 -3

出力例３

OK

Solution in JAVA (judge verdict: Accepted)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        HashSet<Integer> inside = new HashSet<>();
        ArrayDeque<Integer> deq = new ArrayDeque<>();
        for (int i =  1; i <= n; i++) {
            int x = sc.nextInt();
            if (x > 0) {
                if (inside.contains(x)) {
                    System.out.println(i);
                    return;
                }
                inside.add(x);
                deq.push(x);
            } else {
                x *= -1;
                if (deq.size() == 0 || deq.pop() != x) {
                    System.out.println(i);
                    return;
                }
                inside.remove(x);
            }
        }
        System.out.println("OK");
    }
}