00111 01011 01101 01110 10011 10101 10110 11001 11010 11100 #### 11100 [0 1 2] 11010 [0 1 3] 11001 [0 1 4] 10110 [0 2 3] 10101 [0 2 4] 10011 [0 3 4] 01110 [1 2 3] 01101 [1 2 4] 01011 [1 3 4] 00111 [2 3 4] #### typedef struct { int N, M; char *posns. } POSNS; POSNS *initGenerator( int N, int M ) { POSNS *p = malloc( sizeof( POSNS ) ); p->N = N; p->M = M; p->posns = malloc( M ); for( i = 0; i < M; ++i ) p->posns[ i ] = N - M + i; return posns; } char *iterGenerator( POSNS *p ) { if( done) { free( p->posns ); free( p ); return NULL; } // modify p->posns; ... return p->posns; } POSNS p = initGenerator( n, m ); while( c = iterGenerator( p ) ) { // use c[]. }