Problem:
Score : 400 points

Problem Statement

Given is a positive integer N.

Find the number of pairs (A, B) of positive integers not greater than N that satisfy the following condition:

When A and B are written in base ten without leading zeros, the last digit of A is equal to the first digit of B, and the first digit of A is equal to the last digit of B.

Constraints

1 \leq N \leq 2 \times 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer.

Sample Input 1

25

Sample Output 1

17

The following 17 pairs satisfy the condition: (1,1), (1,11), (2,2), (2,22), (3,3), (4,4), (5,5), (6,6), (7,7), (8,8), (9,9), (11,1), (11,11), (12,21), (21,12), (22,2), and (22,22).

Sample Input 2

1

Sample Output 2

1

Sample Input 3

100

Sample Output 3

108

Sample Input 4

2020

Sample Output 4

40812

Sample Input 5

200000

Sample Output 5

400000008

Solution in C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;

namespace AtCorder
{
	public class Program
	{
		static void Main(string[] args)
		{
			int n = int.Parse(Console.ReadLine());
			string s = n.ToString();
			int m = s.Length;
			
			var dp0 = new long[m, 10, 10];
			var dp1 = new long[m, 10, 10];
			for (int i = 1; i < 10; i++) {
				if (i == s[0] - '0') {
					dp1[0, i, i]++;
				} else if (i < s[0] - '0') {
					dp0[0, i, i]++;
				}
			}

			for (int i = 1; i < m; i++) {
				int t = s[i] - '0';
				for (int j = 0; j < 10; j++) {
					dp0[i, j, j] += 1;

					for (int k = 0; k < 10; k++) {
						for (int l = 0; l < 10; l++) {
							dp0[i, k, j] += dp0[i - 1, k, l];
						}

						if (j == t) {
							for (int l = 0; l < 10; l++) {
								dp1[i, k, j] += dp1[i - 1, k, l];
							}
						} else if (j < t) {
							for (int l = 0; l < 10; l++) {
								dp0[i, k, j] += dp1[i - 1, k, l];
							}
						} 
					}
				}
			}

			long ans = 0;
			for (int i = 1; i < 10; i++) {
				for (int j = 1; j < 10; j++) {
					ans += (dp0[m - 1, i, j] + dp1[m - 1, i, j]) * (dp0[m - 1, j, i] + dp1[m - 1, j, i]);
				}
			}

			Console.WriteLine(ans);
		}
	}
}