#include using namespace std; const int MAXX = 50 * 1000 + 5; const int CHUNK = 250; const int BIG = 300000; int cnt(int x, int c) { int ans = 0; while(x > 0) { ans += (c == x % 10); x /= 10; } return ans; } int sum[1800][MAXX + 5]; int main() { //freopen("1000.in","r",stdin); int q; scanf("%d", &q); vector dif(MAXX + 1, 0); map M; for(int i = 1; i <= MAXX; ++i) { dif[i] += dif[i - 1]; dif[i] += cnt(i, 4); dif[i] -= cnt(i, 7); M[dif[i]]++; } vector need; for(auto temp : M) { if(temp.second > 1) { need.push_back(temp.first); } } int sz = need.size(); for(int i = 0; i < sz; ++i) { sum[i][0] = 0; for(int j = 1; j <= MAXX; ++j) { sum[i][j] += sum[i][j - 1]; if(dif[j] == need[i]) sum[i][j]++; } } for(int i = 0; i < q; ++i) { int a, b; scanf("%d %d", &a, &b); long long ans = 0; assert(a >= 1 and a <= b and b <= 50000); for(int j = 0; j < sz; ++j) { int amount = sum[j][b] - sum[j][a - 1]; if(need[j] == dif[a - 1]) amount++; //if(amount != 0) //cerr << amount << " " << need[j] << "\n"; ans += 1LL * amount * (amount - 1) / 2; } printf("%lld\n", ans); } }