using
System;
using
System.Collections.Generic;
class
GFG
{
static
List<List<
int
>> gr =
new
List<List<
int
>>();
static
int
N = 100005;
static
void
add_edge(
int
u,
int
v)
{
for
(
int
i = 0; i < N; i++)
{
gr.Add(
new
List<
int
>());
}
gr[u].Add(v);
gr[v].Add(u);
}
static
int
dijkstra(
int
n)
{
int
[] vis =
new
int
[n];
Array.Fill(vis, 0);
int
[] dist =
new
int
[n];
for
(
int
i = 0; i < n; i++)
{
dist[i] = Int32.MaxValue;
}
vis[0] = 1;
dist[0] = 0;
Queue<
int
> q =
new
Queue<
int
>();
q.Enqueue(0);
while
(q.Count > 0)
{
int
x = q.Dequeue();
for
(
int
i = 0; i < gr[x].Count; i++ )
{
if
(vis[gr[x][i]] == 1)
{
continue
;
}
vis[gr[x][i]] = 1;
dist[gr[x][i]] = dist[x] + 1;
q.Enqueue(gr[x][i]);
}
}
return
dist[n - 1];
}
static
int
Min_Moves(
int
[] a,
int
n)
{
List<List<
int
>> fre =
new
List<List<
int
>>();
for
(
int
i = 0; i < 10; i++)
{
fre.Add(
new
List<
int
>());
}
for
(
int
i = 0; i < n; i++)
{
if
(i != n - 1)
{
add_edge(i, i + 1);
}
fre[a[i]].Add(i);
}
for
(
int
i = 0; i < 10; i++)
{
for
(
int
j = 0; j < fre[i].Count; j++)
{
for
(
int
k = j + 1; k < fre[i].Count; k++)
{
if
(fre[i][j] + 1 != fre[i][k] &&
fre[i][j] - 1 != fre[i][k])
{
add_edge(fre[i][j], fre[i][k]);
}
}
}
}
return
dijkstra(n);
}
static
public
void
Main ()
{
int
[] a = { 1, 2, 3, 4, 1, 5 };
int
n = a.Length;
Console.WriteLine(Min_Moves(a, n));
}
}