using
System;
using
System.Collections.Generic;
class
GFG
{
static
bool
dfs(
int
node,
int
c, List<
int
> []adj,
int
[]color,
bool
[]visited)
{
visited[node] =
true
;
if
(color[node] != c)
{
return
false
;
}
bool
f =
true
;
for
(
int
j = 0; j < adj[node].Count; j++)
{
int
neighbor = adj[node][j];
if
(!visited[neighbor])
{
if
(dfs(neighbor, c, adj,
color, visited) ==
false
)
{
f =
false
;
break
;
}
}
}
return
f;
}
static
void
findNode(
int
[,]edges,
int
[]color,
int
n)
{
List<
int
> []adj =
new
List<
int
>[n + 1];
for
(
int
i = 0; i < n + 1; i++)
adj[i] =
new
List<
int
>();
for
(
int
i = 0; i < n - 1; i++)
{
int
a = edges[i, 0];
int
b = edges[i, 1];
adj[a].Add(b);
adj[b].Add(a);
}
int
ans = -1;
for
(
int
i = 1; i <= n; i++)
{
int
f = 1;
bool
[]visited =
new
bool
[n + 1];
visited[i] =
true
;
for
(
int
j = 0; j < adj[i].Count; j++)
{
int
neighbor = adj[i][j];
if
(dfs(neighbor, color[neighbor],
adj, color, visited) ==
false
)
{
f = 0;
break
;
}
}
if
(f == 1)
{
ans = i;
break
;
}
}
Console.Write(ans);
}
public
static
void
Main(String[] args)
{
int
n = 9;
int
[]color = { -1, 1, 1, 2, 2,
2, 3, 3, 4, 4 };
int
[,]edges = { { 1, 2 }, { 2, 3 },
{ 3, 4 }, { 4, 5 },
{ 2, 7 }, { 7, 6 },
{ 2, 8 }, { 8, 9 } };
findNode(edges, color, n);
}
}