#include #include #include #define lim 225 #define f first.first #define s first.second #define pii pair #define mp make_pair using namespace std; int calc (int x) { int nr = 0; for (; x > 0; x /= 10) if (x % 10 == 4) ++nr; else if (x % 10 == 7) --nr; return nr; } bool cmp (pair a, pair b) { return (a.s < b.s); } vector < pair > bloc[300]; int nr[50010], ap[10010]; long long ans[50010]; int main () { //freopen ("file.in", "r", stdin); for (int i = 1; i <= 50005; ++i) nr[i] = nr[i - 1] + calc (i); int q; scanf ("%d", &q); int nrb = 0; for (int i = 1; i <= q; ++i) { int x, y; scanf ("%d %d", &x, &y); bloc[x/lim].push_back (mp (mp (x, y), i)); nrb = max (nrb, x/lim); } int ri = lim - 1; for (int i = 0; i <= nrb; ++i, ri += lim) { sort (bloc[i].begin (), bloc[i].end (), cmp); for (int i = 0; i <= 10005; ++i) ap[i] = 0; long long rez = 0LL; int lst = ri; for (auto &it : bloc[i]) { for (int j = lst + 1; j <= it.s; ++j) { rez += ap[nr[j]]; ++ap[nr[j]]; } long long crez = rez; lst = max (lst, it.s); for (int j = it.f - 1; j <= min (it.s, ri); ++j) { rez += ap[nr[j]]; ++ap[nr[j]]; } ans[it.second] = rez; rez = crez; for (int j = it.f - 1; j <= min (it.s, ri); ++j) --ap[nr[j]]; } } for (int i = 1; i <= q; ++i) printf ("%lld\n", ans[i]); return 0; }