import
java.util.*;
class
GFG {
static
Pair<Integer, Integer> maxRange(
int
n,
int
[] a,
int
m) {
int
[] pre =
new
int
[n +
5
];
TreeMap<Integer, TreeSet<Integer>> mpp =
new
TreeMap<>();
int
value, l, r, lans = -
1
, rans = -
1
, ans =
0
;
pre[
0
] = a[
0
];
for
(
int
i =
1
; i < n; i++) {
pre[i] = a[i] + pre[i -
1
];
}
for
(
int
i =
0
; i < n; i++) {
pre[i] = pre[i] % m;
if
(!mpp.containsKey(pre[i])) {
mpp.put(pre[i],
new
TreeSet<>());
}
mpp.get(pre[i]).add(i);
}
for
(Map.Entry<Integer, TreeSet<Integer>> entry : mpp.entrySet()) {
int
key = entry.getKey();
TreeSet<Integer> indices = entry.getValue();
if
(key ==
0
) {
value = indices.last() +
1
;
l =
1
;
r = value;
}
else
{
value = indices.last() - indices.first();
l = indices.first() +
2
;
r = indices.last() +
1
;
}
if
(value > ans && l <= r) {
ans = value;
lans = l;
rans = r;
}
}
return
new
Pair<>(lans, rans);
}
public
static
void
main(String[] args) {
int
[] A = {
3
,
7
,
5
,
2
,
5
,
10
};
int
N = A.length;
int
M =
3
;
Pair<Integer, Integer> value = maxRange(N, A, M);
if
(value.getKey() == -
1
) {
System.out.println(-
1
);
}
else
{
System.out.println(value.getKey() +
" "
+ value.getValue());
}
}
static
class
Pair<T, U> {
T first;
U second;
public
Pair(T first, U second) {
this
.first = first;
this
.second = second;
}
public
T getKey() {
return
first;
}
public
U getValue() {
return
second;
}
}
}