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++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; i < (n); i++)
#define RREP(i, n) for (int i = (n); i >= 0; i--)
#define FOR(i, m, n) for (int i = (m); i < (n); i++)
#define ALL(obj) begin(obj), end(obj)
using namespace std;
using ll = long long;
using ull = unsigned long long;

const int INF = 2100100100;
const int MOD = 1e9 + 7;

// 多次元 vector 生成
template <class T> vector<T> make_vec(size_t a) { return vector<T>(a); }
template <class T, class... Ts> auto make_vec(size_t a, Ts... ts) {
    return vector<decltype(make_vec<T>(ts...))>(a, make_vec<T>(ts...));
}
template <class T> bool chmax(T &a, const T &b) {
    if (a < b) {
        a = b;
        return 1;
    }
    return 0;
}
template <class T> bool chmin(T &a, const T &b) {
    if (b < a) {
        a = b;
        return 1;
    }
    return 0;
}

ll N;
ll nt, nb;
ll count(ll t, ll b, ll size) {
    ll ret = 0;
    if (t == b) {
        if (t <= N) {
            ret++;
        }
    }
    if (b * 10 + t <= N) {
        ret++;
    }
    ll n_size = 3;
    ll tmp = 10;
    while (n_size < size) {
        ret += tmp;
        tmp *= 10;
        n_size++;
    }
    if (size >= 3) {
        tmp *= 10;
        ll now = t;
        now += b * tmp;
        if (now <= N) {
            if (b < nt) {
                ret += tmp / 10;
            } else if (b == nt) {
                ll mid = (N - nt * tmp) / 10;
                // cout << mid << endl;
                ret += mid;
            }
        }
    }

    return ret;
}

int main() {
    // cin.tie(0);
    // ios::sync_with_stdio(false);

    cin >> N;
    ll size = 1;
    ll tmp = N;
    nb = tmp % 10;
    nt = nb;
    while (tmp / 10) {
        tmp /= 10;
        size++;
        nt = tmp % 10;
    }

    ll ans = 0;
    FOR(a, 1, N + 1) {

        ll now = a;
        ll b = now % 10;
        ll t = b;
        while (now / 10) {
            now /= 10;
            t = now % 10;
        }
        if (t != 0 && b != 0) {
            ans += count(t, b, size);
            // cout << "a:" << a << " t:" << t << " b:" << b << " count:" << count(t, b, size) << endl;
        }
    }

    cout << ans << endl;

    return 0;
}