#include<iostream>
#include<cstddef>
using std::cin;
using std::cout;
using std::endl;
template<class T>
inline void swap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
return;
}
// 非空子集
void sub(char a[], size_t m, size_t n)
{
if(m == n)
{
cout << a[m] << endl;
return;
}
else
{
for (size_t i = m; i <= n; ++i)
{
cout << a[i];
}
cout << endl;
for (i = m; i <= n; ++i)
{
swap(a[m],a[i]);
sub(a, m+1, n);
swap(a[m],a[i]);
}
}
}
int main()
{
const size_t array_size = 3;
char arr[array_size] = {'a', 'b', 'c'};
sub(arr, 0 , array_size - 1);
cout << " " << endl; // 空集
return 0;
}