#include #define f first #define s second #define pb push_back using namespace std; typedef long long ll; string N, L, R; ll fact[20]; ll solve(int mask, bool bot, bool up) { if (mask == (1 << N.size()) - 1) return 1; if (bot && up) return fact[N.size() - __builtin_popcount(mask)]; int ret = 0; for (int i = 0; i < N.size(); i++) { if (mask & (1 << i)) continue; if (!bot && !up) { if (L[0] <= N[i] && N[i] <= R[0]) { ret += solve(mask | (1 << i), L[0] < N[i], N[i] < R[0]); } continue; } if (bot) { if (N[i] <= R[__builtin_popcount(mask)]) ret += solve(mask | (1 << i), true, up | (N[i] < R[__builtin_popcount(mask)])); } if (up) { if (__builtin_popcount(mask) >= L.size() || N[i] >= L[__builtin_popcount(mask)]) ret += solve(mask | (1 << i), bot | (__builtin_popcount(mask) >= L.size() || N[i] > L[__builtin_popcount(mask)]), true); } } return ret; } int cc[10]; int main() { int t; cin >> t; while (t--) { fact[0] = 1ll; for (int i = 1; i < 20; i++) fact[i] = 1ll * fact[i - 1] * i; cin >> L >> R >> N; for (int i = 0; i < 10; i++) cc[i] = 0; for (int i = 0; i < N.size(); i++) cc[N[i] - '0']++; ll dv = 1ll; for (int i = 0; i < 10; i++) dv *= fact[cc[i]]; cout << solve(0, 0, 0) / dv << endl; } return 0; }