#include <iostream>
#include <iomanip>
using namespace std;
#define N 5

int checkExist(int value, int* a, int n) {
	for (int i = 0; i < n; ++i)
		if (a[i] == value) return i;
	return -1;
}

void frequencyTable(int* a, int*& b, int& n,int*& fre) {
	b = new int[N];	n = 0;	fre = new int[N]; int temp;//initial var & array
	for (int i = 0; i < N; ++i) fre[i] = 1;//inittial value	
	for (int i = 0; i < N; ++i) {
		temp = checkExist(a[i], b, n);
		if (temp != -1) fre[temp]++;
		else b[n++] = a[i];
	}
}

void prtFreTab(int* a, int n, int* fre) {
	cout << '\n';
	cout << setw(15)<<left << "Value: ";
	for (int i = 0; i < n; ++i)
		cout << a[i] << "\t";
	cout << "\n";
	cout << setw(15) << left << "Frequency: ";
	for (int i = 0; i < n; ++i)
		cout << fre[i] << "\t";
	cout << '\n';
}

void prtSet(int* a,int* set,int n){
	for (int i = 0; i < n; ++i)
		for (int j = 1; j <= set[i]; ++j)
			cout << a[i] << " ";
	cout << '\n';
}

void generate(int k, int* set,int* a,int* fre,int n) {
	if (k == n) {
		prtSet(a, set, n);
		return;
	}

	for (int i = k; i < n; ++i) {
		for (int j = 0; j <= fre[i]; ++j) {
			set[i] = j;
			generate(k + 1, set, a, fre, n);
			set[i] = 0;
		}
	}
}

void generateSet(int* a) {
	int* b = nullptr, * fre = nullptr, n = 0;
	frequencyTable(a, b, n, fre);
	prtFreTab(b, n, fre);
	
	int* set = new int[n];
	for (int i = 0; i < n; ++i) set[i] = 0;
	generate(0, set, b, fre, n);


	
	/*delete[]fre,b;*/
}


int main() {
	int a[N];
	for (int i = 0; i < N; ++i)
		cin >> a[i];
	generateSet(a);
	

	return 0;
}