import
java.util.*;
class
Main {
static
int
ans = Integer.MAX_VALUE;
static
void
findCycles(
int
node,
List<List<Integer> > adj,
List<Integer> par,
int
parent)
{
par.set(node, parent);
for
(
int
child : adj.get(node)) {
if
(par.get(child) == Integer.MIN_VALUE) {
findCycles(child, adj, par, node);
}
else
if
(child != parent) {
if
(parent != -
1
&& par.get(parent) == child) {
int
edges = adj.get(child).size()
+ adj.get(node).size()
+ adj.get(parent).size();
if
(edges -
6
< ans)
ans = edges -
6
;
}
}
}
}
static
void
getMinScore(
int
V,
List<List<Integer> > edges)
{
List<List<Integer> > adj =
new
ArrayList<>();
List<Integer> par =
new
ArrayList<>();
for
(
int
i =
0
; i <= V; i++) {
adj.add(
new
ArrayList<>());
par.add(Integer.MIN_VALUE);
}
for
(List<Integer> edge : edges) {
adj.get(edge.get(
0
)).add(edge.get(
1
));
adj.get(edge.get(
1
)).add(edge.get(
0
));
}
for
(
int
i =
1
; i <= V; i++) {
if
(par.get(i) == Integer.MIN_VALUE) {
findCycles(i, adj, par, -
1
);
}
}
}
public
static
void
main(String[] args)
{
int
V =
6
;
List<List<Integer> > edges
=
new
ArrayList<List<Integer> >();
edges.add(Arrays.asList(
1
,
2
));
edges.add(Arrays.asList(
2
,
4
));
edges.add(Arrays.asList(
2
,
5
));
edges.add(Arrays.asList(
3
,
5
));
edges.add(Arrays.asList(
4
,
5
));
edges.add(Arrays.asList(
5
,
6
));
getMinScore(V, edges);
if
(ans == Integer.MAX_VALUE)
System.out.println(-
1
);
else
System.out.println(ans);
}
}