import
java.util.*;
import
java.math.*;
class
GFG {
static
boolean
isPeak(Vector <Long> arr) {
for
(
int
i = arr.size() /
2
; i < arr.size() -
1
; i++) {
if
(arr.get(i) < arr.get(i +
1
)) {
return
false
;
}
}
for
(
int
i =
0
; i < arr.size() /
2
; i++) {
if
(arr.get(i) > arr.get(i +
1
)) {
return
false
;
}
}
return
true
;
}
static
long
maximize(
long
n) {
long
Ele = n;
long
ans = n;
for
(
int
idx =
0
; idx <
7
; idx++) {
if
((Ele &
1
) ==
1
) {
Ele >>=
1
;
Ele += Math.pow(
2
,
32
);
}
else
{
Ele >>=
1
;
}
ans = Math.max(ans, Ele);
}
return
ans;
}
static
Vector <Long> makeDec(Vector <Long> arr) {
long
prev = maximize(arr.get(
0
));
arr.set(
0
, prev);
for
(
int
i =
1
; i < arr.size(); i++) {
long
optEle = arr.get(i);
boolean
flag =
true
;
long
Ele = arr.get(i);
for
(
int
idx =
0
; idx <
7
; idx++) {
if
((Ele &
1
) ==
1
) {
Ele >>=
1
;
Ele += Math.pow(
2
,
32
);
}
else
{
Ele >>=
1
;
}
if
(Ele < prev && flag) {
optEle = Ele;
flag =
false
;
}
if
(Ele < prev) {
optEle = Math.max(optEle, Ele);
}
}
arr.set(i, optEle);
prev = arr.get(i);
}
return
arr;
}
static
Vector <Long> makePeak(Vector <Long> arr) {
Vector <Long> first =
new
Vector<Long>
(arr.subList(
0
, arr.size() /
2
+
1
));
Collections.reverse(first);
Vector <Long> second =
new
Vector<Long>
(arr.subList(arr.size() /
2
, arr.size()));
Vector <Long> ans = makeDec(first);
Collections.reverse(ans);
Vector <Long> secondPart = makeDec(second);
secondPart.remove(
0
);
ans.addAll(secondPart);
if
(isPeak(ans)) {
return
ans;
}
Vector <Long> emptyVec =
new
Vector<Long>();
return
emptyVec;
}
public
static
void
main(String[] args) {
Vector <Long> arr =
new
Vector<Long>
(Arrays.asList(7L, 3L, 4L, 5L, 3L));
Vector <Long> result = makePeak(arr);
if
(result.size() >
0
) {
for
(
int
i =
0
; i < result.size(); i++) {
System.out.print(result.get(i) +
" "
);
}
}
else
{
System.out.print(
"No peak found"
);
}
}
}