import
java.util.HashMap;
class
GFG {
public
static
int
maxPrefixLen(
int
arr[],
int
N)
{
HashMap<Integer, Integer> a =
new
HashMap<Integer, Integer>();
HashMap<Integer, Integer> b =
new
HashMap<Integer, Integer>();
int
ans =
1
;
for
(
int
i =
0
; i < N; i++) {
int
curr = !a.containsKey(arr[i]) ?
0
: a.get(arr[i]);
if
(curr !=
0
) {
b.put(curr, b.get(curr) -
1
);
if
(b.get(curr) ==
0
)
{
b.remove(curr);
}
}
if
(a.containsKey(arr[i])) {
a.put(arr[i], a.get(arr[i]) +
1
);
}
else
{
a.put(arr[i],
1
);
}
if
(b.containsKey(curr +
1
)) {
b.put(curr +
1
, b.get(curr +
1
) +
1
);
}
else
{
b.put(curr +
1
,
1
);
}
if
(a.get(arr[i]) == i +
1
|| (b.containsKey(
1
) && b.get(
1
) == i +
1
))
{
ans = Math.max(ans, i +
1
);
}
else
if
(b.size() ==
2
) {
int
p = b.keySet().toArray()[
0
].hashCode();
int
q = b.keySet().toArray()[
1
].hashCode();
int
freq1 = p;
int
freq2 = q;
int
count1 = b.get(p);
int
count2 = b.get(q);
if
((freq2 - freq1) ==
1
&& count2 ==
1
)
{
ans = Math.max(ans, i +
1
);
}
else
if
(freq1 - freq2 ==
1
&& count1 ==
1
)
{
ans = Math.max(ans, i +
1
);
}
if
((freq2 ==
1
&& count2 ==
1
) || (freq1 ==
1
&& count1 ==
1
))
{
ans = Math.max(ans, i +
1
);
}
}
}
return
ans;
}
public
static
void
main(String args[]) {
int
arr[] = {
1
,
1
,
1
,
2
,
2
,
2
,
3
,
3
,
3
,
4
,
4
,
4
,
5
};
int
N = arr.length;
System.out.println(maxPrefixLen(arr, N));
}
}