#include <iostream>

void print( unsigned int n, const unsigned int A[] )
{
    for( unsigned int i = 0 ; i <= n ; ++i ) std::cout << A[i] << ' ' ;
    std::cout << '\n' ;
}

void print_partitions( unsigned int n, unsigned int A[], unsigned int j = 0 )
{
    if( n > 0 )
    {
        A[j] = n ;
        print( j, A ) ;
        for( unsigned int i = j ? A[j-1] : 1 ; i <= n/2 ; ++i )
        {
            A[j] = i ;
            print_partitions( n-i, A, j+1 ) ;
        }
    }
}

int main()
{
    constexpr unsigned int N = 6 ;
    unsigned int A[N] ;
    print_partitions( N, A );
}
