#include <stdio.h>

typedef struct
{
    char suit, value;
} Card;

void bubble(Card A[], int N)
{
    int i, j;
    Card t;
    for (i = 0; i < N; i++)
    {
        for (j = N - 1; j >= i; j--)
        {
            if (A[j].value < A[j - 1].value)
            {
                t = A[j];
                A[j] = A[j - 1];
                A[j - 1] = t;
            }
        }
    }
}

void selection(Card A[], int N)
{
    int i, j, minj;
    Card t;
    for (i = 0; i < N; i++)
    {
        minj = i;
        for (j = i; j < N; j++)
        {
            if (A[j].value < A[minj].value)
                minj = j;
        }
        t = A[i];
        A[i] = A[minj];
        A[minj] = t;
    }
}

void print(Card A[], int N)
{
    int i;
    for (i = 0; i < N; i++)
    {
        if (i > 0)
            printf(" ");
        printf("%c%d", A[i].suit, A[i].value);
    }
    printf("\n");
}

int isStable(Card C1[], Card C2[], int N)
{
    int i;
    for (i = 0; i < N; i++)
    {
        if (C1[i].suit != C2[i].suit)
            return 0;
    }
    return 1;
}

/* オリジナル関数を追加 */
void str2Card(Card *t, char str[])
{
    t->suit = str[0];
    t->value = str[1] - '0';
}

int main(void)
{
    Card C1[100], C2[100];
    int N, i;
    char str[3];

    scanf("%d", &N);
    for (i = 0; i < N; i++)
    {
        scanf("%s", str);
        str2Card(&C1[i], str);
    }

    for (i = 0; i < N; i++)
        C2[i] = C1[i];

    bubble(C1, N);
    selection(C2, N);

    print(C1, N);
    printf("Stable\n");
    print(C2, N);
    if (isStable(C1, C2, N))
    {
        printf("Stable\n");
    }
    else
    {
        printf("Not stable\n");
    }

    return 0;
}
