import
java.util.*;
public
class
GFG {
public
static
class
Pair
implements
Comparable<Pair> {
int
first;
int
second;
Pair(
int
first,
int
second)
{
this
.first = first;
this
.second = second;
}
public
int
compareTo(Pair ob)
{
if
(
this
.first == ob.first) {
return
this
.second - ob.second;
}
return
this
.first - ob.first;
}
}
public
static
int
max_product_of_edges_in_path(
int
n, ArrayList<ArrayList<Integer> > roads)
{
ArrayList<Pair>[] adj =
new
ArrayList[n +
1
];
for
(
int
i =
0
; i < n +
1
; i++) {
adj[i] =
new
ArrayList<>();
}
for
(
int
i =
0
; i < roads.size(); i++) {
adj[roads.get(i).get(
0
)].add(
new
Pair(
roads.get(i).get(
1
), roads.get(i).get(
2
)));
;
}
PriorityQueue<Pair> pq =
new
PriorityQueue<>();
pq.add(
new
Pair(
1
,
1
));
int
[] max_product =
new
int
[n +
1
];
Arrays.fill(max_product, -
1
);
max_product[
1
] =
1
;
while
(!pq.isEmpty()) {
Pair p = pq.remove();
if
(max_product[p.second] > p.first)
continue
;
for
(Pair it : adj[p.second]) {
if
(p.first * it.second
> max_product[it.first]) {
max_product[it.first]
= p.first * it.second;
pq.add(
new
Pair(max_product[it.first],
it.first));
}
}
}
return
max_product[n];
}
public
static
void
main(String[] args)
{
int
n =
5
;
ArrayList<ArrayList<Integer> > edges
=
new
ArrayList<ArrayList<Integer> >();
edges.add(
new
ArrayList<Integer>() {
{
add(
1
);
add(
2
);
add(
5
);
}
});
edges.add(
new
ArrayList<Integer>() {
{
add(
1
);
add(
3
);
add(
6
);
}
});
edges.add(
new
ArrayList<Integer>() {
{
add(
1
);
add(
4
);
add(
7
);
}
});
edges.add(
new
ArrayList<Integer>() {
{
add(
4
);
add(
2
);
add(
4
);
}
});
edges.add(
new
ArrayList<Integer>() {
{
add(
2
);
add(
5
);
add(
8
);
}
});
System.out.println(
max_product_of_edges_in_path(n, edges));
}
}