import
java.io.*;
import
java.util.*;
class
GFG {
static
int
count =
0
;
public
static
void
dfs(ArrayList<ArrayList<Integer> > adj,
int
src,
boolean
visited[])
{
visited[src] =
true
;
count++;
for
(
int
it : adj.get(src)) {
if
(!visited[it]) {
dfs(adj, it, visited);
}
}
}
public
static
int
maxPairs(
int
N, ArrayList<ArrayList<Integer> > edges)
{
ArrayList<ArrayList<Integer> > adj
=
new
ArrayList<ArrayList<Integer> >();
for
(
int
i =
0
; i < N; i++) {
ArrayList<Integer> temp
=
new
ArrayList<Integer>();
adj.add(temp);
}
for
(
int
i =
0
; i < edges.size(); i++) {
ArrayList<Integer> temp
= adj.get(edges.get(i).get(
0
));
temp.add(edges.get(i).get(
1
));
adj.set(edges.get(i).get(
0
), temp);
temp = adj.get(edges.get(i).get(
1
));
temp.add(edges.get(i).get(
0
));
adj.set(edges.get(i).get(
1
), temp);
}
int
total = N * (N -
1
) /
2
;
boolean
[] visited =
new
boolean
[N +
1
];
for
(
int
i =
0
; i <= N; i++) {
visited[i] =
false
;
}
for
(
int
i =
0
; i < N; i++) {
if
(visited[i] ==
false
) {
count =
0
;
dfs(adj, i, visited);
total -= (count * (count -
1
) /
2
);
}
}
return
total;
}
public
static
void
main(String[] args)
{
int
N =
4
;
ArrayList<ArrayList<Integer> > edges
=
new
ArrayList<ArrayList<Integer> >();
edges.add(
new
ArrayList<Integer>(Arrays.asList(
1
,
2
)));
edges.add(
new
ArrayList<Integer>(Arrays.asList(
2
,
3
)));
int
result = maxPairs(N, edges);
System.out.println(result);
}
}