combinatorics: generating combinations - hard code and general approache