/************************************************
Algorithmen und Problemloesungen mit C++,
http://www.algorithmen-und-problemloesungen.de
Copyright @2007 by Doina Logofatu
************************************************/

#include <fstream>
#include <iostream>
#include <bitset>

void write(unsigned n, std::bitset<16> &b, std::ofstream &out){
  int i, nr1 = 0;
  for(i=0; i<(int)n; i++){
    if(1==b[i]){
      nr1++;
      if(1==nr1){
        out<< "{" << i+1;
      } else {
           out << ", " << i+1;
      }
    }
  }
  if(nr1>0) out << "}" << std::endl;
  else out << "{}" << std::endl;
}

int main(){
  std::bitset<16> b;
  unsigned n, k;
  bool flag;
  std::ofstream out("subsets.out");
  std::cout<< " n = "; std::cin >> n;
  flag=true;
  while(flag){
    k=0;
    write(n, b, out);
    while(k<n && 1==b[k]) b[k++]=0;
    if(k<n)      
      b[k]=1;
    else
      flag = false;    
  }
  return 0;
}
