#include <stdio.h>

typedef struct{
	char suit;
	char value;
} card;

void bubble(card *p,int N);
int selection(card *p,int N);

int main(){
	card p1[50];
	card p2[50];
	int i,N;

	scanf("%d",&N);

	for(i=0;i<N;i++){
		scanf(" %c%c",&p1[i].suit,&p1[i].value);
	}

	for(i=0;i<N;i++){
		p2[i]=p1[i];
	}

	bubble(p1,N);

	for(i=0;i<N;i++){
		printf("%c%c",p1[i].suit,p1[i].value);
		if(i!=N-1) printf(" ");
	}
	printf("\nStable\n");	

	int l=selection(p2,N);

	for(i=0;i<N;i++){
		printf("%c%c",p2[i].suit,p2[i].value);
		if(i!=N-1) printf(" ");
	}
	printf("\n");
	if(l==1) printf("Not stable\n");
	else{
		printf("Stable\n");
	}

	return 0;
}

void bubble(card *p,int N){
	card key;
	int i,j;
	for(i=0;i<N;i++){
		for(j=N-1;j>i;j--){
			if(p[j].value<p[j-1].value){
				key=p[j];
				p[j]=p[j-1];
				p[j-1]=key;
			}
		}
	}
}

int selection(card *p,int N){
	card key;
	int i,j,min,f,l;
	for(i=0;i<N;i++){
		min=i;
		f=0;
		for(j=i+1;j<N;j++){
			if(p[j].value==p[min].value) f=1;
			if(p[j].value<p[min].value){
				min=j;
				if(f==1) l=1;
			}
		}
		if(min!=i){
			key=p[i];
			p[i]=p[min];
			p[min]=key;
		}
	}
	if(l==1) return 1;
	else return 0;
}