【題目敘述】http://codeforces.com/problemset/problem/686/C
#include <bits/stdc++.h>
using namespace std;
int n, m, mid, l, used[7];
string s;
int f(int pos, bool lim){
if (pos == s.length()) return 1;
if (pos == s.length()-mid) lim = 1;
int tmp = s[pos]-'0', ret = 0;
if (lim){
if (!used[tmp]){
used[tmp] = 1;
ret += f(pos+1, 1);
used[tmp] = 0;
}
for (int i = 0; i < tmp; i++){
if (used[i]) continue;
used[i] = 1;
ret += f(pos+1, 0);
used[i] = 0;
}
}
else{
for (int i = 0; i < 7; i++){
if (used[i]) continue;
used[i] = 1;
ret += f(pos+1, 0);
used[i] = 0;
}
}
return ret;
}
int main(){
cin >> n >> m;
n--;
m--;
if (m == 0) s = "0";
while (m){
s = (char)('0'+(m%7)) + s;
m /= 7;
}
mid = s.length();
if (n == 0) s = '0' + s;
while (n){
s = (char)('0'+(n%7)) + s;
n /= 7;
}
//cout << "s: " << s << "\n";
if (s.length() > 7){
cout << 0 << "\n";
return 0;
}
cout << f(0, 1);
}