#include<stdio.h>
#include<string.h>
#define NUM 36


typedef struct card{
 char mark;
 int num;
}Card;


void swap(Card T[],int *a,int *b){
Card temp;

temp=T[*a];
T[*a]=T[*b];
T[*b]=temp;

}



void selesort(Card T[],int n){
int i,j,k,max,max_index;

 for(i=n-1;i>0;i--){
  max=T[0].num; max_index=0;
  for(j=1;j<=i;j++){ 
   if(T[j].num>=max){max=T[j].num; max_index=j;}
  }
  swap(T,&max_index,&i);

}

}


void bubble(Card U[],int n){
 int i,j;

for(i=0;i<n-1;i++){
 for(j=n-1;j>=i;j--){
  if(U[j].num<U[j-1].num){ swap(U,&j,&j-1); }
 }
}

}








int main(){
int n,i;
Card T[NUM];
Card U[NUM];
char a;
scanf("%d",&n);

for(i=0;i<n;i++){
 scanf(" %c%d",&T[i].mark,&T[i].num,&a);
 U[i]=T[i];
}


selesort(T,n);
bubble(U,n);

for(i=0;i<n-1;i++){
printf("%c%d ",U[i].mark,U[i].num);
}
printf("%c%d\n",U[n-1].mark,U[n-1].num);

printf("Stable\n");



for(i=0;i<n-1;i++){
printf("%c%d ",T[i].mark,T[i].num);
}
printf("%c%d\n",T[n-1].mark,T[n-1].num);



if(T==U){printf("Stable");}
else{printf("Not stable");}




return 0;
}