#include <bits/stdc++.h>
using namespace std;
int main() {

    // 3、一维数组的排序
    
    int n;
    cin >> n;

    const int MAXSIZE = 100 + 1;
    int arr[MAXSIZE];
    memset(arr, 0, sizeof(arr));

    for (int i = 1; i <= n; i++) {
        cin >> arr[i];
    }
    
    // (1) 冒泡排序
    
    for (int i = 1; i <= n; i++) {
        for (int j = n; j > i; j--) {
            if (arr[j] < arr[j - 1]) { // < 升序,> 降序 
                swap(arr[j], arr[j - 1]);
            }
        } 
    }

    // (2) 冒泡排序(优化,用于接近完成的序列) 
    
    bool exchange;
    for (int i = 1; i <= n; i++) {
        exchange = false;
        for (int j = n; j > i; j--) {
            if (arr[j] < arr[j - 1]) { // < 升序,> 降序 
                swap(arr[j], arr[j - 1]);
                cout << "swap : " << arr[j] << " <-> " << arr[j - 1] << endl;
                exchange = true;
            }
        } 
        if (!exchange) break;
    }  

    // (3) 选择排序
    
    for (int i = 1; i < n; i++) {
        for (int j = i; j <= n; j++) {
            if (arr[i] > arr[j]) { // 确定擂主 
                swap(arr[i], arr[j]);
            }
        }
    }

    // (3) 插入排序
    
    for (int i = 1; i <= n; i++) {
        for (int j = i; j > 1; j--) {
            if (arr[j] < arr[j - 1]) {
                swap(arr[j], arr[j - 1]);
            }
        }
    }  

    for (int i = 1; i <= n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    // (4) 计数排序
    
    int n;
    cin >> n;
    const int MAXSIZE = 100 + 1;
    int arr[MAXSIZE];
    memset(arr, 0, sizeof(arr));   
     
    int num; 
    for (int i = 1; i <= n; i++) {
        cin >> num;
        arr[num]++;
    }
    
    // 去重输出 
    for (int i = 1; i <= MAXSIZE; i++) {
        if (arr[i] > 0) {
            cout << i << " ";
        }
    }
    cout << endl;
    
    // 重复元素输出 
    for (int i = 1; i <= MAXSIZE; i++) {
        while (arr[i] > 0) {
            cout << i << " ";
            arr[i]--;
        }
    }     
    cout << endl;

    // (5) sort 排序 
     
    int n;
    cin >> n;
    const int MAXSIZE = 100 + 1;
    int arr[MAXSIZE];
    memset(arr, 0, sizeof(arr));
    for (int i = 1; i <= n; i++) {
        cin >> arr[i];
    }
     
    sort(arr + 1, arr + 1 + n); // 升序排序 
    
    sort(arr + 1, arr + 1 + n, greater<int>()); // 降序排序 
    
    for (int i = 1; i <= n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;  
    
    int cnt = unique(arr + 1, arr + 1 + n) - (arr + 1); // 去重 , 并返回去重后的数量 

    for (int i = 1; i <= cnt; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;  
	
	return 0;
}