import
java.util.*;
class
GFG{
static
void
max_distance(
int
a[],
int
temp[],
int
n)
{
Map<Integer,
Integer> mp =
new
HashMap<Integer,
Integer>();
for
(
int
i =
1
; i <= n; i++)
{
temp[i] = -
1
;
}
for
(
int
i =
0
; i < n; i++)
{
if
(mp.get(a[i]) ==
null
)
temp[a[i]] = i +
1
;
else
temp[a[i]] = Math.max(temp[a[i]],
i - mp.getOrDefault(a[i],
0
));
mp.put(a[i], i);
}
for
(
int
i =
1
; i <= n; i++)
{
if
(temp[i] != -
1
)
temp[i] = Math.max(temp[i],
n - mp.getOrDefault(i,
0
));
}
}
static
void
min_comm_ele(
int
a[],
int
ans[],
int
temp[],
int
n)
{
max_distance(a, temp, n);
for
(
int
i =
1
; i <= n; i++)
{
ans[i] = -
1
;
}
for
(
int
i =
1
; i <= n; i++)
{
if
(temp[i] >=
0
&& ans[temp[i]] == -
1
)
ans[temp[i]] = i;
}
for
(
int
i =
1
; i <= n; i++)
{
if
(i >
1
&& ans[i -
1
] != -
1
)
{
if
(ans[i] == -
1
)
ans[i] = ans[i -
1
];
else
ans[i] = Math.min(ans[i],
ans[i -
1
]);
}
System.out.print(ans[i] +
" "
);
}
}
public
static
void
main(String args[])
{
int
N =
6
;
int
a[] = {
1
,
3
,
4
,
5
,
6
,
7
};
int
[]temp =
new
int
[
100
];
Arrays.fill(temp,
0
);
int
[]ans =
new
int
[
100
];
Arrays.fill(ans,
0
);
min_comm_ele(a, ans, temp, N);
}
}