#include <algorithm>
#include <iostream>
#include <string>
using
namespace
std;
int
findLongestValidNumberLength(
int
arr[],
int
size)
{
int
maxValidLength = 0;
int
dp[10][10] = { 0 };
for
(
int
i = size - 1; i >= 0; --i) {
string numString = to_string(arr[i]);
int
lastDigit = numString.back() -
'0'
;
int
v[10] = { 0 };
for
(
int
d = 0; d < 10; ++d) {
if
(dp[lastDigit][d] > 0) {
v[d]
= numString.length() + dp[lastDigit][d];
}
}
v[lastDigit]
= max(v[lastDigit],
static_cast
<
int
>(numString.length()));
int
firstDigit = numString.front() -
'0'
;
for
(
int
d = 0; d < 10; ++d) {
dp[firstDigit][d]
= max(dp[firstDigit][d], v[d]);
}
maxValidLength = max(maxValidLength,
dp[firstDigit][firstDigit]);
}
return
maxValidLength;
}
int
main()
{
int
arr1[] = { 100, 234, 416, 654, 412, 298, 820, 177 };
int
size1 =
sizeof
(arr1) /
sizeof
(arr1[0]);
int
arr2[] = { 81, 24, 478, 905, 331, 138, 721, 565 };
int
size2 =
sizeof
(arr2) /
sizeof
(arr2[0]);
int
arr3[] = { 1111, 2222, 3333, 4444, 5555 };
int
size3 =
sizeof
(arr3) /
sizeof
(arr3[0]);
cout << findLongestValidNumberLength(arr1, size1)
<< endl;
cout << findLongestValidNumberLength(arr2, size2)
<< endl;
cout << findLongestValidNumberLength(arr3, size3)
<< endl;
return
0;
}