Follows 146.c (Total 58 lines):

/* @JUDGE_ID:4461XX 146 C */
/* A */
#include<stdio.h>
#include<string.h>
int freech[26] ;
char arr[80] , ans[80] , nextch ;
void initial( void )
{
	int i ;
	for( i=0 ; i<26 ; i++ ) freech[i] = 0 ;
}
int CanPut( int i )
{
	int k ;
	for( k=i+1 ; k<26 ; k++ )
		if( freech[k] ){
			freech[k]-- ;
			nextch = k + 'a' ;
			return 1 ;
		}
	return 0 ;
}
void ContinuePut( int i )
{
	int k , m ;
	for( k=i+1 ; k<strlen( arr ) ; k++ )
		for( m=0 ; m<26 ; m++ )
			if( freech[m] ){
				freech[m]-- ;
				ans[k] = m + 'a' ;
				break ;
			}
}
int find( void )
{
	int len=strlen( arr ) , i ;
	for( i=len-1 ; i>=0 ; i-- ){
		freech[ans[i]-'a']++ ;
		ans[i] = ' ' ;
		if( CanPut( arr[i]-'a' ) ){
			ans[i] = nextch ;
			ContinuePut( i ) ;
			puts( ans ) ;
			return 1 ;
		}
	}
	return 0 ;
}
void main( void )
{
	while( gets( arr ) ){
		if( *arr == '#' ) break ;
		initial() ;
		strcpy( ans , arr ) ;
		if( !find() ) puts( "No Successor" ) ;
	}
}
/* @END_OF_SOURCE_CODE */

Back to statistics
Ya-Lin Huang (C)
huangyl@gmail.com