import
java.util.*;
class
GFG {
static
int
getLeftMostZero(Queue<Integer> zero)
{
if
(zero.isEmpty())
return
-
1
;
zero.remove();
return
0
;
}
static
int
getLeftMostOne(Queue<Integer> one)
{
if
(one.isEmpty())
return
-
1
;
one.remove();
return
1
;
}
static
int
getLeftMostElement(Queue<Integer> zero, Queue<Integer> one)
{
if
(zero.isEmpty() && one.isEmpty())
return
-
1
;
else
if
(zero.isEmpty()) {
one.remove();
return
1
;
}
else
if
(one.isEmpty()) {
zero.remove();
return
0
;
}
int
res = (zero.peek() < one.peek()) ?
0
:
1
;
if
(res ==
0
)
zero.remove();
else
one.remove();
return
res;
}
static
void
performQueries(
int
arr[],
int
n,
int
queries[],
int
q)
{
Queue<Integer> zero =
new
LinkedList<>();
Queue<Integer> one =
new
LinkedList<>();
for
(
int
i =
0
; i < n; i++) {
if
(arr[i] ==
0
)
zero.add(i);
else
one.add(i);
}
for
(
int
i =
0
; i < q; i++) {
int
type = queries[i];
switch
(type) {
case
1
:
System.out.println(getLeftMostZero(zero));
break
;
case
2
:
System.out.println(getLeftMostOne(one));
break
;
case
3
:
System.out.println(getLeftMostElement(zero, one));
break
;
}
}
}
public
static
void
main(String args[])
{
int
arr[] = {
1
,
0
,
1
,
1
,
1
};
int
n = arr.length;
int
queries[] = {
1
,
3
,
1
};
int
q = queries.length;
performQueries(arr, n, queries, q);
}
}