#include #include typedef struct sor { int ertek; int sorszam; } SOR ; int N ; SOR t[100001] ; int kiir[100001] ; void csere ( int honnan , int meddig ) ; int keres ( int honnan ) ; int main () { int i , j , k ; scanf ( "%d" , &N ) ; while ( N != 0 ) { for ( i = 0 ; i < N ; i++ ) { scanf ( "%d" , &j ) ; t[i].ertek = j ; t[i].sorszam = i ; } for ( j = 0 ; j < N ; ) { k = keres ( j ) ; j = k ; } for ( i = 0 ; i < N ; i++ ) if ( i < N - 1 ) printf ( "%d " , kiir[i] ) ; else printf ( "%d\n" , kiir[i] ) ; scanf ( "%d" , &N ) ; } return 0 ; } int keres ( int honnan ) { int i , min , minindex , iindex ; min = t[honnan].ertek ; minindex = honnan ; iindex = honnan ; for ( i = honnan + 1 ; i < N ; i++ ) { if ( t[i].ertek <= min ) { if ( t[i].ertek == min && t[i].sorszam < minindex ) { min = t[i].ertek ; minindex = t[i].sorszam ; iindex = i ; } else if ( t[i].ertek < min ) { min = t[i].ertek ; minindex = t[i].sorszam ; iindex = i ; } } } if ( honnan == iindex ) { kiir[honnan] = iindex + 1 ; return honnan + 1 ; } kiir[honnan] = iindex + 1 ; csere ( honnan , iindex ) ; return honnan + 1 ; } void csere ( int honnan , int meddig ) { int i , j , seged1 , seged2 ; if ( honnan == meddig - 1 ) { seged1 = t[honnan].ertek ; seged2 = t[honnan].sorszam ; t[honnan].ertek = t[meddig].ertek ; t[honnan].sorszam = t[meddig].sorszam ; t[meddig].ertek = seged1 ; t[meddig].sorszam = seged2 ; return ; } for ( i = honnan , j = meddig ; i <= meddig / 2 ; i++ , j-- ) { seged1 = t[i].ertek ; seged2 = t[i].sorszam ; t[i].ertek = t[j].ertek ; t[i].sorszam = t[j].sorszam ; t[j].ertek = seged1 ; t[j].sorszam = seged2 ; } return ; }