#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion var f = new Dictionary[10]; void Init() { for (var i = 0; i <= 9; i++) f[i] = new(1 << 16){ [0] = i }; } long F(long x, int d) { if (f[d].TryGetValue(x, out var cv)) return cv; var res = 0L; for (var i = 0; i <= Math.Min(x, 9); i++) res += F((x - i) / 10, Math.Max(d, i)); return f[d][x] = res; } Init(); var ans = new List(); var t = I(); for (var j = 0; j < t; j++) { var l = I(); var r = I(); ans.Add(F(r, 0) - F(l - 1, 0)); } Console.WriteLine(string.Join(Environment.NewLine, ans));