http://poj.org/problem?id=1496
#include<map>
#include<set>
#include<list>
#include<cmath>
#include<ctime>
#include<deque>
#include<stack>
#include<bitset>
#include<cstdio>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iomanip>
#include<numeric>
#include<sstream>
#include<utility>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std ;
int c[ 30 ][ 30 ] = { 0 } , sum ;
void play_table( )
{
for( int i = 0 ; i <= 26 ; ++i )
{
for( int j = 0 ; j <= i ; ++j )
{
if( !j || i == j )
{
c[ i ][ j ] = 1 ;
}
else
{
c[ i ][ j ] = c[ i - 1 ][ j ] + c[ i - 1 ][ j - 1 ] ;
}
}
}
}
int main()
{
// string str ;
char str[ 100 ] ;
play_table() ;
while( cin >> str )
{
sum = 0 ;
int len = strlen( str ) ;
//int len = str.length() ;
int flag = 0 ;
for( int i = 1 ; i < len ; ++i )
{
if( str[ i - 1 ] >= str[ i ] )
{
flag = 1 ;
}
}
for( int i = 1 ; i < len ; ++ i )
{
sum += c[ 26 ][ i ] ;
}
for( int i = 0 ; i < len ; ++i )
{
char ch = ( !i )? 'a' : str[ i - 1 ] + 1 ;
while( ch <= str[ i ] - 1 )
{
sum += c[ 'z' - ch ][ len - i - 1 ] ;
ch++ ;
}
}
if( flag )
cout << "0" << endl ;
else
cout << ++sum << endl ;
}
return 0;
}