#include<bits/stdc++.h>
#define f1(i, n) for(ll i=1;i<=n;++i)
#define f0(i, n) for(ll i=0;i<n;++i)
#define ull unsigned long long
#define ll long long
#define rev(a) reverse(a.begin(),a.end())
#define all(x) x.begin(),x.end()
#define so(A, n) sort(A+1, A+n+1)
using namespace std;
const int maxn = 200010;
const int N = 1e5 + 1;
// Duyet trau
void c1() {
int n;
string s;
cin >> n >> s;
bool ch['9' + 1] = {};
int cnt = 0;
for (int i = 0; i < s.size(); ++i) ch[s[i]] = true;
for (int i = 1; i <= n; ++i) {
string a = to_string(i);
bool check = true;
for (int j = 0; j < a.size(); ++j) {
if (ch[a[j]]) {
check = false;
break;
}
}
if (!check) cnt++;
}
cout << n - cnt;
}
// Backtracking
vector<int> v;
int ans = 0, n, cnt = 0;
int countDigit(int n) {
int res = 0;
while (n != 0) {n /= 10; ++res;}
return res;
}
set<int> result;
void backtrack(int pos, int uia) {
if (pos > uia) {
return;
}
for (int i = 0; i < v.size(); ++i) {
ans = ans * 10 + v[i];
if (ans <= n && ans != 0) {
result.insert(ans);
}
backtrack(pos + 1, uia);
ans /= 10;
}
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
string s;
cin >> n >> s;
for (int i = 0; i <= 9; ++i) {
v.push_back(i);
for (int j = 0; j < s.size(); ++j) {if (s[j] - 48 == i) {v.pop_back(); break;}}
}
int motcaigiday = countDigit(n);
backtrack(1, motcaigiday);
cout << result.size() << "\n";
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmMShpLCBuKSBmb3IobGwgaT0xO2k8PW47KytpKQojZGVmaW5lIGYwKGksIG4pIGZvcihsbCBpPTA7aTxuOysraSkKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcmV2KGEpIHJldmVyc2UoYS5iZWdpbigpLGEuZW5kKCkpCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgc28oQSwgbikgc29ydChBKzEsIEErbisxKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgbWF4biA9IDIwMDAxMDsKY29uc3QgaW50IE4gPSAxZTUgKyAxOwovLyBEdXlldCB0cmF1CnZvaWQgYzEoKSB7CglpbnQgbjsKCXN0cmluZyBzOwoJY2luID4+IG4gPj4gczsKCWJvb2wgY2hbJzknICsgMV0gPSB7fTsKCWludCBjbnQgPSAwOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBzLnNpemUoKTsgKytpKSBjaFtzW2ldXSA9IHRydWU7Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKCQlzdHJpbmcgYSA9IHRvX3N0cmluZyhpKTsKCQlib29sIGNoZWNrID0gdHJ1ZTsKCQlmb3IgKGludCBqID0gMDsgaiA8IGEuc2l6ZSgpOyArK2opIHsKCQkJaWYgKGNoW2Fbal1dKSB7CgkJCQljaGVjayA9IGZhbHNlOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKCFjaGVjaykgY250Kys7Cgl9Cgljb3V0IDw8IG4gLSBjbnQ7Cn0KLy8gQmFja3RyYWNraW5nCnZlY3RvcjxpbnQ+IHY7CmludCBhbnMgPSAwLCBuLCBjbnQgPSAwOwppbnQgY291bnREaWdpdChpbnQgbikgewoJaW50IHJlcyA9IDA7Cgl3aGlsZSAobiAhPSAwKSB7biAvPSAxMDsgKytyZXM7fQoJcmV0dXJuIHJlczsKfQpzZXQ8aW50PiByZXN1bHQ7CnZvaWQgYmFja3RyYWNrKGludCBwb3MsIGludCB1aWEpIHsKCWlmIChwb3MgPiB1aWEpIHsKCQlyZXR1cm47Cgl9Cglmb3IgKGludCBpID0gMDsgaSA8IHYuc2l6ZSgpOyArK2kpIHsKCQlhbnMgPSBhbnMgKiAxMCArIHZbaV07CgkJaWYgKGFucyA8PSBuICYmIGFucyAhPSAwKSB7CgkJCXJlc3VsdC5pbnNlcnQoYW5zKTsKCQl9CgkJYmFja3RyYWNrKHBvcyArIDEsIHVpYSk7CgkJYW5zIC89IDEwOwoJfQp9CmludCBtYWluKCkKewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CglzdHJpbmcgczsKCWNpbiA+PiBuID4+IHM7Cglmb3IgKGludCBpID0gMDsgaSA8PSA5OyArK2kpIHsKCQl2LnB1c2hfYmFjayhpKTsKCQlmb3IgKGludCBqID0gMDsgaiA8IHMuc2l6ZSgpOyArK2opIHtpZiAoc1tqXSAtIDQ4ID09IGkpIHt2LnBvcF9iYWNrKCk7IGJyZWFrO319Cgl9CglpbnQgbW90Y2FpZ2lkYXkgPSBjb3VudERpZ2l0KG4pOwoJYmFja3RyYWNrKDEsIG1vdGNhaWdpZGF5KTsKCWNvdXQgPDwgcmVzdWx0LnNpemUoKSA8PCAiXG4iOwoJcmV0dXJuIDA7Cn0KCg==