#include using namespace std; using uint = unsigned int; using ll = long long; using pii = pair; #define dbg(x) cerr<<#x": "<<(x)<<'\n' #define dbg_v(x, n) cerr<<#x"[]: ";for(long long _=0;_ v[100000]; int dif(int x) { int ret; for(ret = 0; x; x /= 10) if(x % 10 == 4) ++ret; else if(x % 10 == 7) --ret; return ret; } void insert(int s, int pos) { v[s + 50000].push_back(pos); } int query(int s, int a, int b) { return upper_bound(all(v[s + 50000]), b) - lower_bound(all(v[s + 50000]), a); } int main() { #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); freopen("data.out", "w", stdout); #endif ios_base::sync_with_stdio(false); int i, q, l, r, currentAns; Query qq; for(sum[0] = 0, i = 1; i < VMAX; ++i) sum[i] = sum[i - 1] + dif(i); for(i = 0; i < VMAX; ++i) insert(sum[i], i); cin >> q; for(i = 0; i < q; ++i) { cin >> queries[i].l >> queries[i].r; queries[i].id = i; } sort(queries, queries + q); l = 1; r = 0; currentAns = 0; for(i = 0; i < q; ++i) { qq = queries[i]; while(r < qq.r) ++r, currentAns += query(sum[r], l - 1, r - 1); while(r > qq.r) currentAns -= query(sum[r], l - 1, r - 1), --r; while(l < qq.l) currentAns -= query(sum[l - 1], l, r), ++l; while(l > qq.l) --l, currentAns += query(sum[l - 1], l, r); ans[qq.id] = currentAns; } for(i = 0; i < q; ++i) cout << ans[i] << '\n'; return 0; }