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 JavaScript (node.js v5.12) (judge verdict: Wrong Answer)

"use strict"
function main(arg) {
    var N = arg.split("\n")[0].split(" ").map(Number)[0]
    var K = String(N).split("").length
    var count = 0
    for (var i = 1; i < N; i++) {
        var row = get_tip(i)
        // if (row[1] === 0) continue
        // console.log(row)
        var L = String(i).split("").length
        for (var j = 1; j <= K; j++) {
            //左辺が1けた
            if (L === 1) {
                // 右辺が1けた
                if (j === 1) {
                    count++
                    // console.log([i,i])
                }
                //右辺が2けた
                if (j === 2 && row[0] === row[1]) {
                    count++
                    // console.log([i, i + "" + i])
                }
                //右辺が複数けた
                if (j > 2 && row[0] === row[1]) {
                    for (var k = 0;; k++) {
                        var x = Number("" + i + k + i)
                        if (x > N) break 
                        // console.log([i, x])
                        count++
                    }
                }
            }
            //左辺が複数けた
            if (L > 1) {
                //右辺が1けた
                if (j === 1) {
                    if (row[0] === row[1])
                    // console.log([i,"--",row[0]])
                    count++
                }
                //右辺が2けた
                if (j === 2) {
                    if (row[0] === row[1])
                    // console.log([i,"--",row[1]  + "" + row[0]])
                    count++
                }
                //右辺が2けた
                if (j > 2) {
                    for (var k = 0;; k++) {
                        var x = Number("" + row[1] + k + row[0])
                        if (x > N) break 
                        // console.log([i, x])
                        count++
                    }
                }
                // if (j === 2 && row[0] === row[1]) {
                //     console.log([i,i])
                //     count++
                // }
            }
        }
    }
    console.log(count)
}
main(require('fs').readFileSync('/dev/stdin', 'utf8'));

function get_tip(a) {
    var a_str = String(a)
    var x = String(a).split("").length
    if (x === 1) {
        return [a_str, a_str].map(Number)
    }
    if (x > 1) {
        return [a_str[0], a_str[x - 1]].map(Number)
    }
}