using
System;
using
System.Collections.Generic;
class
GFG {
static
int
X = 1;
static
int
diameter = 0;
static
Dictionary<
int
, Boolean> mp
=
new
Dictionary<
int
, Boolean>();
static
void
dfs(
int
current_node,
int
prev_node,
int
len,
bool
add_to_map,
List<
int
>[] adj)
{
if
(len > diameter)
{
diameter = len;
X = current_node;
}
if
(add_to_map && len == diameter)
{
mp.Add(current_node,
true
);
}
foreach
(
int
it
in
adj[current_node])
{
if
(it != prev_node)
dfs(it, current_node, len + 1,
add_to_map, adj);
}
}
static
void
dfsUtility(List<
int
>[] adj)
{
dfs(1, -1, 0,
false
, adj);
int
farthest_node = X;
dfs(farthest_node, -1, 0,
false
, adj);
dfs(farthest_node, -1, 0,
true
, adj);
dfs(X, -1, 0,
true
, adj);
}
static
void
printDiameters(List<
int
>[] adj)
{
dfsUtility(adj);
for
(
int
i = 1; i <= 6; i++)
{
if
(mp.ContainsKey(i) && mp[i] ==
true
)
Console.Write(diameter + 1 +
", "
);
else
Console.Write(diameter +
", "
);
}
}
public
static
void
Main(String[] args)
{
List<
int
>[] adj =
new
List<
int
>[ 7 ];
for
(
int
i = 0; i < adj.Length; i++)
adj[i] =
new
List<
int
>();
adj[1].Add(2);
adj[2].Add(1);
adj[1].Add(3);
adj[3].Add(1);
adj[2].Add(4);
adj[4].Add(2);
adj[2].Add(5);
adj[5].Add(2);
adj[2].Add(6);
adj[6].Add(2);
printDiameters(adj);
}
}