| import types | 
 |  | 
 | def flatten(tup): | 
 |     elts = [] | 
 |     for elt in tup: | 
 |         if type(elt) == types.TupleType: | 
 |             elts = elts + flatten(elt) | 
 |         else: | 
 |             elts.append(elt) | 
 |     return elts | 
 |  | 
 | class Set: | 
 |     def __init__(self): | 
 |         self.elts = {} | 
 |     def __len__(self): | 
 |         return len(self.elts) | 
 |     def __contains__(self, elt): | 
 |         return self.elts.has_key(elt) | 
 |     def add(self, elt): | 
 |         self.elts[elt] = elt | 
 |     def elements(self): | 
 |         return self.elts.keys() | 
 |     def has_elt(self, elt): | 
 |         return self.elts.has_key(elt) | 
 |     def remove(self, elt): | 
 |         del self.elts[elt] | 
 |     def copy(self): | 
 |         c = Set() | 
 |         c.elts.update(self.elts) | 
 |         return c | 
 |  | 
 | class Stack: | 
 |     def __init__(self): | 
 |         self.stack = [] | 
 |         self.pop = self.stack.pop | 
 |     def __len__(self): | 
 |         return len(self.stack) | 
 |     def push(self, elt): | 
 |         self.stack.append(elt) | 
 |     def top(self): | 
 |         return self.stack[-1] |