// 给你一个字符串 看下是否符合里面字符都是递增的
// 如果是,那么求出他的编号
// a是1号 ab是27号 .... 以此类推
// 思路:给你的串长n 求长度为 1,2...n-1的合法串个数 C[26][1]+C[26][2]+...+C[26][n-1]
// 求长度为n的串在同等长度里面排第几
// 然后就OK了
#include <iostream>
#include <string>
#include<sstream>
#include <cmath>
#include <map>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define LL long long
int C[40][40];
int dp[40];
void init()
{
int i,j;
for(i=0;i<=30;i++) C[i][0]=1;
for(i=1;i<=30;i++)
for(j=1;j<=i;j++)
C[i][j]=C[i-1][j-1]+C[i-1][j];
}
char str[10];
int h[30];//记录哪些字符被用过
int fun(int ln,int index)
{
int i=1,j=1,sum=0;
char c=str[index];
int lf=26;// left 表示还剩下几个字符串可以选
if(index>0) {// 计算枚举的开始位置i
index--;
lf='z'-str[index];// 因为字符串要递增 所以可以这么求
i=str[index]-'a'+1;
}
for(;i<=26;i++)
if(!h[i])
{
if(c==(i-1+'a'))
break;
else
{
sum=sum+ C[lf-j][ln-1];
j++;
}
}
return sum;
}
int main()
{
init();
int i,j;
while(scanf("%s",str)!=EOF)
{
memset(h,0,sizeof(h));
int len=strlen(str);
int flag=0,ans=0;
for(i=1;i<len;i++)//累加前n-1种总数和
ans+=C[26][i];
for(i=0;i<len;i++)
for(j=i+1;j<len;j++)
if(str[i]>=str[j])
flag=1;
if(flag) printf("0
");
else
{
for(i=0;i<len;i++)
{
ans=ans+fun(len-i,i);
h[str[i]-'a'+1]=1;
// lf--;
}
printf("%d
",ans+1);
}
}
return 0;
}