#安定なソート
#4つの絵柄と9つの数字から成る36枚のカード
def bubble(nums,N):
    for i in range(N-1): #先頭が確定するまで調べる（確定したら先頭の次の値が先頭になる）
        j = N-1
        while j > i:
            if nums[j-1][1] > nums[j][1]:
                nums[j-1], nums[j] = nums[j], nums[j-1]
            j = j - 1 #交換したら次の値に移動する
    return nums

def selection(nums,N):
    for i in range(N-1):
        minj = i
        for j in range(i+1,N): #配列を探索し、最小値を見つける
            if nums[minj][1] > nums[j][1]:
                minj = j
        if minj != i:
            nums[minj], nums[i] = nums[i], nums[minj]
    return nums

N = int(input())
nums = input().split()
nums2 = nums.copy()
#numsをそのまま二つのソートで使うと、後のソートでは先のソートの影響を受けるので、コピーしておく
#あるいは、numsではなくnums[:]を引数とする

result1 = bubble(nums,N)
print(' '.join(map(str,result1)))
print("Stable")
result2 = selection(nums2,N)
print(' '.join(map(str,result2)))
print("Stable" if result1 == result2 else "Not stable")
 def bubble(nums,N):
    for i in range(N-1): #先頭が確定するまで調べる（確定したら先頭の次の値が先頭になる）
        j = N-1
        while j > i:
            if nums[j-1][1] > nums[j][1]:
                nums[j-1], nums[j] = nums[j], nums[j-1]
            j = j - 1 #交換したら次の値に移動する
    return nums bubble for i in range(N-1): #先頭が確定するまで調べる（確定したら先頭の次の値が先頭になる）
        j = N-1
        while j > i:
            if nums[j-1][1] > nums[j][1]:
                nums[j-1], nums[j] = nums[j], nums[j-1]
            j = j - 1 #交換したら次の値に移動する
     i range(N-1) range N-1 N 1 j = N-1 j N-1 N 1 while j > i:
            if nums[j-1][1] > nums[j][1]:
                nums[j-1], nums[j] = nums[j], nums[j-1]
            j = j - 1 #交換したら次の値に移動する
     j > i j i if nums[j-1][1] > nums[j][1]:
                nums[j-1], nums[j] = nums[j], nums[j-1]
             nums[j-1][1] > nums[j][1] nums[j-1][1] [j-1] nums j-1 j 1 1 nums[j][1] [j] nums j 1 nums[j-1], nums[j] = nums[j], nums[j-1] nums[j-1] nums j-1 j 1 nums[j] nums j nums[j] nums j nums[j-1] nums j-1 j 1 j = j - 1 j j - 1 j 1 return nums nums nums nums N N def selection(nums,N):
    for i in range(N-1):
        minj = i
        for j in range(i+1,N): #配列を探索し、最小値を見つける
            if nums[minj][1] > nums[j][1]:
                minj = j
        if minj != i:
            nums[minj], nums[i] = nums[i], nums[minj]
    return nums selection for i in range(N-1):
        minj = i
        for j in range(i+1,N): #配列を探索し、最小値を見つける
            if nums[minj][1] > nums[j][1]:
                minj = j
        if minj != i:
            nums[minj], nums[i] = nums[i], nums[minj]
     i range(N-1) range N-1 N 1 minj = i minj i for j in range(i+1,N): #配列を探索し、最小値を見つける
            if nums[minj][1] > nums[j][1]:
                minj = j
         j range(i+1,N) range i+1 i 1 N if nums[minj][1] > nums[j][1]:
                minj = j
         nums[minj][1] > nums[j][1] nums[minj][1] [minj] nums minj 1 nums[j][1] [j] nums j 1 minj = j minj j if minj != i:
            nums[minj], nums[i] = nums[i], nums[minj]
     minj != i minj i nums[minj], nums[i] = nums[i], nums[minj] nums[minj] nums minj nums[i] nums i nums[i] nums i nums[minj] nums minj return nums nums nums nums N N N = int(input()) N int(input()) int input() input nums = input().split() nums input().split() ().split () input split nums2 = nums.copy() nums2 nums.copy() nums.copy nums copy result1 = bubble(nums,N) result1 bubble(nums,N) bubble nums N print(' '.join(map(str,result1))) print ' '.join(map(str,result1)) ' '.join ' ' join map(str,result1) map str result1 print("Stable") print "Stable" result2 = selection(nums2,N) result2 selection(nums2,N) selection nums2 N print(' '.join(map(str,result2))) print ' '.join(map(str,result2)) ' '.join ' ' join map(str,result2) map str result2 print("Stable" if result1 == result2 else "Not stable") print "Stable" if result1 == result2 else "Not stable" result1 == result2 result1 result2 "Stable" "Not stable" def bubble(nums,N):
    for i in range(N-1): #先頭が確定するまで調べる（確定したら先頭の次の値が先頭になる）
        j = N-1
        while j > i:
            if nums[j-1][1] > nums[j][1]:
                nums[j-1], nums[j] = nums[j], nums[j-1]
            j = j - 1 #交換したら次の値に移動する
    return nums def bubble(nums,N):
    for i in range(N-1): #先頭が確定するまで調べる（確定したら先頭の次の値が先頭になる）
        j = N-1
        while j > i:
            if nums[j-1][1] > nums[j][1]:
                nums[j-1], nums[j] = nums[j], nums[j-1]
            j = j - 1 #交換したら次の値に移動する
    return nums bubble N = int(input()) int(input()) N result1 = bubble(nums,N) bubble(nums,N) result1 nums = input().split() input().split() nums def selection(nums,N):
    for i in range(N-1):
        minj = i
        for j in range(i+1,N): #配列を探索し、最小値を見つける
            if nums[minj][1] > nums[j][1]:
                minj = j
        if minj != i:
            nums[minj], nums[i] = nums[i], nums[minj]
    return nums def selection(nums,N):
    for i in range(N-1):
        minj = i
        for j in range(i+1,N): #配列を探索し、最小値を見つける
            if nums[minj][1] > nums[j][1]:
                minj = j
        if minj != i:
            nums[minj], nums[i] = nums[i], nums[minj]
    return nums selection result2 = selection(nums2,N) selection(nums2,N) result2 nums2 = nums.copy() nums.copy() nums2
#安定なソート
#4つの絵柄と9つの数字から成る36枚のカード
def bubble(nums,N):
    for i in range(N-1): #先頭が確定するまで調べる（確定したら先頭の次の値が先頭になる）
        j = N-1
        while j > i:
            if nums[j-1][1] > nums[j][1]:
                nums[j-1], nums[j] = nums[j], nums[j-1]
            j = j - 1 #交換したら次の値に移動する
    return nums

def selection(nums,N):
    for i in range(N-1):
        minj = i
        for j in range(i+1,N): #配列を探索し、最小値を見つける
            if nums[minj][1] > nums[j][1]:
                minj = j
        if minj != i:
            nums[minj], nums[i] = nums[i], nums[minj]
    return nums

N = int(input())
nums = input().split()
nums2 = nums.copy()
#numsをそのまま二つのソートで使うと、後のソートでは先のソートの影響を受けるので、コピーしておく
#あるいは、numsではなくnums[:]を引数とする

result1 = bubble(nums,N)
print(' '.join(map(str,result1)))
print("Stable")
result2 = selection(nums2,N)
print(' '.join(map(str,result2)))
print("Stable" if result1 == result2 else "Not stable")

