import
java.util.*;
public
class
GFG
{
static
boolean
isValid(
int
i,
int
j,
int
R,
int
C)
{
if
(i <
0
|| i >= R || j >= C || j <
0
)
return
false
;
return
true
;
}
static
void
kthOccurrenceOfElement(Vector<Vector<Integer>> arr,
Vector<Vector<Integer>> Q)
{
int
R = arr.size();
int
C = arr.get(
0
).size();
HashMap<Integer, Vector<Integer>> um =
new
HashMap<Integer, Vector<Integer>>();
int
pos =
1
;
for
(
int
k =
0
; k < R; k++)
{
if
(!um.containsKey(arr.get(k).get(
0
)))
{
um.put(arr.get(k).get(
0
),
new
Vector<Integer>());
}
um.get(arr.get(k).get(
0
)).add(pos);
pos++;
int
i = k -
1
;
int
j =
1
;
while
(isValid(i, j, R, C)) {
if
(!um.containsKey(arr.get(i).get(j)))
{
um.put(arr.get(i).get(j),
new
Vector<Integer>());
}
um.get(arr.get(i).get(j)).add(pos);
pos++;
i--;
j++;
}
}
for
(
int
k =
1
; k < C; k++) {
if
(!um.containsKey(arr.get(R -
1
).get(k)))
{
um.put(arr.get(R -
1
).get(k),
new
Vector<Integer>());
}
um.get(arr.get(R -
1
).get(k)).add(pos);
pos++;
int
i = R -
2
;
int
j = k +
1
;
while
(isValid(i, j, R, C)) {
if
(!um.containsKey(arr.get(i).get(j)))
{
um.put(arr.get(i).get(j),
new
Vector<Integer>());
}
um.get(arr.get(i).get(j)).add(pos);
pos++;
i--;
j++;
}
}
for
(
int
i =
0
; i < Q.size(); i++) {
int
X = Q.get(i).get(
0
);
int
K = Q.get(i).get(
1
);
if
(!um.containsKey(X) || um.get(X).size() < K) {
System.out.println(-
1
);
}
else
{
System.out.println(um.get(X).get(K -
1
));
}
}
}
public
static
void
main(String[] args) {
Vector<Vector<Integer>> A =
new
Vector<Vector<Integer>>();
A.add(
new
Vector<Integer>());
A.get(
0
).add(
1
);
A.get(
0
).add(
4
);
A.add(
new
Vector<Integer>());
A.get(
1
).add(
2
);
A.get(
1
).add(
5
);
Vector<Vector<Integer>> Q =
new
Vector<Vector<Integer>>();
Q.add(
new
Vector<Integer>());
Q.get(
0
).add(
4
);
Q.get(
0
).add(
1
);
Q.add(
new
Vector<Integer>());
Q.get(
1
).add(
5
);
Q.get(
1
).add(
1
);
Q.add(
new
Vector<Integer>());
Q.get(
2
).add(
10
);
Q.get(
2
).add(
2
);
kthOccurrenceOfElement(A, Q);
}
}