#include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> using namespace std; long p(int a) { long re = 1; if(a <= 1) { cout << 1 << endl; return 1; } for(int i = 2;i <= a;i++) { re *= i; } return re; } long p1(int a) { long re = a-1; if(a <= 1) { cout << 1 << endl; return 1; } for(int i = 2;i <= a-1;i++) { re *= i; } return re; } int main() { long a,b; cin >> a >> b; long re = 0; int ai = to_string(a).size(),bi = to_string(b).size(); long aii = pow(10,ai),bii = pow(10,bi); int a2 = a / (aii/10),b2 = b / (bii/10); if(bi-ai > 1) { for(int i = ai+1;i < bi;i++) { re += p1(i); } } if(bi - ai > 0) { if(a2 * aii / 10 == a) { a2--; } if(bi >= 2) { if(b % (bii / 10) / (bii / 100) >= bi) { bi++; } } if(a2 < ai-1) { re += p(ai-1) * ((ai-1) - a2); } if(b2 > 1) { re += p(bi-1) * (b2 - 1); } } else { if(b2 - a2 > 1) { re += p(bi-1) * (b2-a2-1); } } for(int i = a;i < (a2+1)*aii/10;i++) { string ss = to_string(i); vector<int> ar(10,0); bool f = false; for(char c : ss) { if(ar[c-'0'] != 0 || c-'0' > ss.size()-1) { f = true; break; } else { ar[c-'0'] = 1; } } if(!f) { re++; } } for(int i = b;i > (b2)*bii/10;i--) { string ss = to_string(i); vector<int> ar(10,0); bool f = false; for(char c : ss) { if(ar[c-'0'] != 0 || c-'0' > ss.size()-1) { f = true; break; } else { ar[c-'0'] = 1; } } if(!f) { re++; } } cout << re; }