#include<stdio.h>
#include<string.h>
//一个函数将剩下的数字变成连续数字
void serialize(int, int *);
//一个函数递归调用直到数列只剩1个数
void find_order(int, int *, int);
//算阶乘(factorial)函数
int factorial(int);
int main(void) {
int N = 0;
char X[10] = { 0 };
scanf("%d", &N);
getchar();//吞换行
gets(X);
int number = strlen(X);
int x[10] = { 0 };
for (int i = 0; i < number; i++) {
x[i] = (int)(X[i] - '0');
}//将字符型转换为整数型
find_order(number, x,1);
return 0;
}
void find_order(int number, int * x,int sum) {
if (number == 1) {
printf("%d", sum);
return;
}
else {
if (x[0]>1) {
sum += (factorial(number - 1))*(x[0] - 1);
serialize(number, x);
find_order(number - 1, x, sum);
}
else {
serialize(number, x);
find_order(number - 1, x, sum);
}
}
}
int factorial(int m) {
int n = 1;
for (int i = 1; i <= m; i++) {
n *= i;
}
return n;
}
void serialize(int number, int * x) {
int a = x[0];
for (int i = 0; i < number - 1; i++) {
x[i] = x[i + 1] > a ? (x[i + 1] - 1) : x[i + 1];
}
return;
}