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.Generic;
using System.Diagnostics;
using System.Diagnostics.Contracts;
using System.Linq;

namespace at_coder
{
#if TEST
    [TestClass]
#endif
    public class Test_152_d
{

        /// <summary>
        /// https://atcoder.jp/contests/abc152/tasks/abc152_d
        /// </summary>
#if TEST
        public static void Test_Main()
#else
        public static void Main()
#endif
        {
            var N = Int32.Parse(Console.ReadLine());

            // 先頭 i 末尾 j の 数値の数を数える
            // c[i,j] に 発見したものを加算する
            int[,] c = new int[10,10];
            for(int i=1;i<=N;i++)
            {
                int n1 = GetN1(i);
                int n2 = i % 10;
                if (n2 != 0)
                {
                    c[n1, n2]++;
                }
            }

            // 先頭が i 末尾 j (c[i,j] )
            // 先頭が j 末尾 i (c[j,i] ) の 組み合わせ数を
            // 全て加算する

            int ans = 0;
            for(int i=1;i<=9;i++)
            {
                for(int j=1;j<=9;j++)
                {
                    ans += c[i, j] * c[j, i];
                }
            }

            Console.WriteLine(ans.ToString());
        }

        /// <summary>
        /// 先頭の1ケタの数字を取得する 1から9 を返す
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        private static int GetN1(int i)
        {
            int n1 = i;
            while (n1 >= 10) n1 = n1 / 10;
            return n1;
        }
#if TEST
#else
    }
}
#endif