# ALDS_2_B.
# バブルソート。
from math import sqrt, floor

def intinput():
    a = input().split()
    for i in range(len(a)):
        a[i] = int(a[i])
    return a

def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str)

def selection_sort(a):
    # 選択ソート。その番号以降の最小値を順繰りにもってくる。
    # 交換回数は少ないが比較回数の関係で結局O(n^2)かかる。
    count = 0
    for i in range(len(a)):
        # a[i]からa[len(a) - 1]のうちa[j]が最小っていうjを取る。
        # このときiとjが違うならカウントする。
        # というかa[i]とa[j]が違う時カウントでしたね。
        minj = i
        for j in range(i, len(a)):
            if a[j] < a[minj]: minj = j
        if a[i] > a[minj]: count += 1; a[i], a[minj] = a[minj], a[i]
    return count

def main():
    N = int(input())
    A = intinput()
    count = selection_sort(A)
    show(A); print(count)

if __name__ == "__main__":
    main() from math import sqrt, floor def intinput():
    a = input().split()
    for i in range(len(a)):
        a[i] = int(a[i])
    return a intinput a = input().split() a input().split() ().split () input split for i in range(len(a)):
        a[i] = int(a[i])
     i range(len(a)) range len(a) len a a[i] = int(a[i]) a[i] a i int(a[i]) int a[i] a i return a a def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str) show _str = "" _str "" for i in range(len(a) - 1):
        _str += str(a[i]) + " "
     i range(len(a) - 1) range len(a) - 1 len(a) len a 1 _str += str(a[i]) + " " _str str(a[i]) + " " str(a[i]) str a[i] a i " " _str += str(a[len(a) - 1]) _str str(a[len(a) - 1]) str a[len(a) - 1] a len(a) - 1 len(a) len a 1 print(_str) print _str a a def selection_sort(a):
    # 選択ソート。その番号以降の最小値を順繰りにもってくる。
    # 交換回数は少ないが比較回数の関係で結局O(n^2)かかる。
    count = 0
    for i in range(len(a)):
        # a[i]からa[len(a) - 1]のうちa[j]が最小っていうjを取る。
        # このときiとjが違うならカウントする。
        # というかa[i]とa[j]が違う時カウントでしたね。
        minj = i
        for j in range(i, len(a)):
            if a[j] < a[minj]: minj = j
        if a[i] > a[minj]: count += 1; a[i], a[minj] = a[minj], a[i]
    return count selection_sort count = 0 count 0 for i in range(len(a)):
        # a[i]からa[len(a) - 1]のうちa[j]が最小っていうjを取る。
        # このときiとjが違うならカウントする。
        # というかa[i]とa[j]が違う時カウントでしたね。
        minj = i
        for j in range(i, len(a)):
            if a[j] < a[minj]: minj = j
        if a[i] > a[minj]: count += 1; a[i], a[minj] = a[minj], a[i]
     i range(len(a)) range len(a) len a minj = i minj i for j in range(i, len(a)):
            if a[j] < a[minj]: minj = j
         j range(i, len(a)) range i len(a) len a if a[j] < a[minj]: minj = j
         a[j] < a[minj] a[j] a j a[minj] a minj if a[i] > a[minj]: count += 1; a[i], a[minj] = a[minj], a[i]
     a[i] > a[minj] a[i] a i a[minj] a minj return count count a a def main():
    N = int(input())
    A = intinput()
    count = selection_sort(A)
    show(A); print(count) main N = int(input()) N int(input()) int input() input A = intinput() A intinput() intinput count = selection_sort(A) count selection_sort(A) selection_sort A show(A) show A print(count) print count if __name__ == "__main__":
    main() __name__ == "__main__" __name__ "__main__" main() main def main():
    N = int(input())
    A = intinput()
    count = selection_sort(A)
    show(A); print(count) def main():
    N = int(input())
    A = intinput()
    count = selection_sort(A)
    show(A); print(count) main def selection_sort(a):
    # 選択ソート。その番号以降の最小値を順繰りにもってくる。
    # 交換回数は少ないが比較回数の関係で結局O(n^2)かかる。
    count = 0
    for i in range(len(a)):
        # a[i]からa[len(a) - 1]のうちa[j]が最小っていうjを取る。
        # このときiとjが違うならカウントする。
        # というかa[i]とa[j]が違う時カウントでしたね。
        minj = i
        for j in range(i, len(a)):
            if a[j] < a[minj]: minj = j
        if a[i] > a[minj]: count += 1; a[i], a[minj] = a[minj], a[i]
    return count def selection_sort(a):
    # 選択ソート。その番号以降の最小値を順繰りにもってくる。
    # 交換回数は少ないが比較回数の関係で結局O(n^2)かかる。
    count = 0
    for i in range(len(a)):
        # a[i]からa[len(a) - 1]のうちa[j]が最小っていうjを取る。
        # このときiとjが違うならカウントする。
        # というかa[i]とa[j]が違う時カウントでしたね。
        minj = i
        for j in range(i, len(a)):
            if a[j] < a[minj]: minj = j
        if a[i] > a[minj]: count += 1; a[i], a[minj] = a[minj], a[i]
    return count selection_sort def intinput():
    a = input().split()
    for i in range(len(a)):
        a[i] = int(a[i])
    return a def intinput():
    a = input().split()
    for i in range(len(a)):
        a[i] = int(a[i])
    return a intinput def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str) def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str) show
# ALDS_2_B.
# バブルソート。
from math import sqrt, floor

def intinput():
    a = input().split()
    for i in range(len(a)):
        a[i] = int(a[i])
    return a

def show(a):
    # 配列の中身を出力する。
    _str = ""
    for i in range(len(a) - 1):
        _str += str(a[i]) + " "
    _str += str(a[len(a) - 1])
    print(_str)

def selection_sort(a):
    # 選択ソート。その番号以降の最小値を順繰りにもってくる。
    # 交換回数は少ないが比較回数の関係で結局O(n^2)かかる。
    count = 0
    for i in range(len(a)):
        # a[i]からa[len(a) - 1]のうちa[j]が最小っていうjを取る。
        # このときiとjが違うならカウントする。
        # というかa[i]とa[j]が違う時カウントでしたね。
        minj = i
        for j in range(i, len(a)):
            if a[j] < a[minj]: minj = j
        if a[i] > a[minj]: count += 1; a[i], a[minj] = a[minj], a[i]
    return count

def main():
    N = int(input())
    A = intinput()
    count = selection_sort(A)
    show(A); print(count)

if __name__ == "__main__":
    main()
