#include <assert.h>
#include <stdio.h>
#include <stdbool.h>

int readArray(int a[], int maxSize) {
    /* Od užívateľa načíta počet vstupných čísel.
     * Potom načíta zadaný počet celých čísel a uloží ich do poľa a,
     * Hodnota maxSize je veľkosť poľa,
     * ktorú nemožno prekročiť.
     * Funkcia vráti počet načítaných čísel. */

    int n;
    scanf("%d", &n);
    assert(n <= maxSize);
    for (int i = 0; i < n; i++) {
        scanf("%d", &(a[i]));
    }
    return n;
}

void printArray(int a[], int n, int oddelovac) {
    /* Vypise pole a dlzky n, pricom pred cislo na pozicii oddelovac
     * vypise zvislu ciaru. Ak oddelovac je zaporny, ciaru
     * nevypise. Ak je oddelovac rovny n, vypise ho za koniec pola. */
    for (int i = 0; i < n; i++) {
        if (i == oddelovac) {
            printf(" |");
        }
        printf(" %d", a[i]);
    }
    if (oddelovac == n) {
        printf(" |");
    }
    printf("\n");
}


void swap(int a[], int i, int j) {
    /* Vymeň hodnoty prvkov v poli a na pozíciách i a j. */
    int tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
}


int maxIndex(int a[], int n) {
    /* vráti index, na ktorom je najväčší prvok z prvkov a[0]...a[n-1] */
    int index = 0;
    for (int i = 1; i < n; i++) {
        if (a[i] > a[index]) {
            index = i;
        }
    }
    return index;
}

void sort(int a[], int n) {
    /* usporiada prvky v poli a od najmensieho po najväcsi */
    for (int kam = n - 1; kam >= 1; kam--) {
        printArray(a, n, kam + 1);
        int index = maxIndex(a, kam + 1);
        swap(a, index, kam);
    }
}

#define NMAX 100

int main(void) {
    int a[NMAX];

    int n = readArray(a, NMAX);

    // triedenie a vypis
    sort(a, n);
    printf("Vysledok:\n");
    printArray(a, n, -1);
}

