# Generates set partitions recursively



def partitions(set_):
    if not set_:
        yield []
        return    
    for i in xrange(2**len(set_)/2): 
        print i        
        parts = [set(), set()]
        for item in set_:
            parts[i&1].add(item) 
                    
            i >>= 1
                     
        for b in partitions(parts[1]):
            yield [parts[0]]+b


#for i in xrange(5):
#   print list(partitions(set(range(i))))

print list(partitions(set(range(2))))