线性dp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
char str[20];
int l[N],r[N];
int f[N],g[10];
int n;
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ )
{
scanf("%s",str);
l[i] = str[0] - '0',r[i] = str[strlen(str) - 1] - '0';
}
int res = 0;
for (int i = 0; i < n; i ++ )
{
f[i] = 1;
f[i] = max(f[i],g[l[i]] + 1);
g[r[i]] = max(f[i],g[r[i]]);
res = max(res,f[i]);
}
printf("%d",n - res);
return 0;
}