#include <bits/stdc++.h>
using namespace std;
using uint = unsigned int;
using ll = long long;
using pii = pair<int, int>;
#define dbg(x) cerr<<#x": "<<(x)<<'\n'
#define dbg_v(x, n) cerr<<#x"[]: ";for(long long _=0;_<n;++_)cerr<<(x)[_]<<' ';cerr<<'\n'
#define all(v) v.begin(), v.end()
#define QMAX 50010
#define VMAX 50010
#define BSIZE 250

struct Query
{
	int l, r, id;
	
	bool operator <(const Query &q) const
	{
		if(l / BSIZE != q.l / BSIZE) return l < q.l;
		return (r < q.r) ^ ((l / BSIZE) & 1);
	}
};

Query queries[QMAX];
int ans[QMAX], sum[VMAX];
vector<int> 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;
}