Follows 195.c (Total 77 lines):

/* @JUDGE_ID:4461XX 195 C "order is=AaBbCcDdEe..." */
/* A */
#include<stdio.h>
#include<string.h>
#define MAX 1000

struct DATA{
	char ch ;
	int num ;
}data[MAX] ;
int n , data_n ;
char ans[MAX] ;

int Input( void )
{
	char in[MAX] , tmp ;
	int i , j , numi , numj ;
	
	gets( in ) ;
	n = strlen( in ) ;
	/* sort */
	for( i=0 ; i<n ; ++i )
		for( j=i+1 ; j<n ; ++j ){
			if( 'A'<=in[i] && in[i]<='Z' ) numi = in[i]-'A' ;
			else numi = in[i]-'a' ;
			if( 'A'<=in[j] && in[j]<='Z' ) numj = in[j]-'A' ;
			else numj = in[j]-'a' ;
			
			if( numi>numj || ( numi==numj && in[i]>in[j] ) ){
				tmp = in[i] ;
				in[i] = in[j] ;
				in[j] = tmp ;
			}
		}
	
	/* put in data[] */
	data[0].ch = in[0] ;
	data[0].num = 1 ;
	for( i=1,j=0 ; i<n ; ++i )
		if( in[i]==data[j].ch ) ++data[j].num ;
		else{
			++j ;
			data[j].ch = in[i] ;
			data[j].num = 1 ;
		}
		
	data_n = j+1 ;
}
void dfs( int level )
{
	int i ;
	
	if( level==n ){
		ans[n] = 0 ;
		puts( ans ) ;
	}
	else
		for( i=0 ; i<data_n ; ++i )
			if( data[i].num ){
				ans[level] = data[i].ch ;
				--data[i].num ;
				dfs( level+1 ) ;
				++data[i].num ;
			}
}
int main( void )
{
	int time ;

	scanf( "%d\n" , &time ) ;
	for( ; time ; --time ){
		Input() ;
		dfs( 0 ) ;

/*		putchar( '\n' ) ;*/
	}
}

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