input: 
  class HashTable:
      def __init__(self):
          self.table = [[] for _ in range(256)]
   
      def insert(self, key, value):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  self.table[h][i] = (key, value)
                  return
          self.table[h].append((key, value))
   
      def retrieve(self, key):
          h = hash(key) % 256
          for kv in self.table[h]:
              if kv[0] == key:
                  return kv[1]
   
      def delete(self, key):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  del self.table[h][i]
  
  # Test cases:
  
  # Test insert and retrieve
  # Input: (key='name', value='Alice')
  # Output: After inserting, retrieve('name') should return 'Alice'
  
  # Test insert and delete
  # Input: (key='age', value=25)
  # Output: After inserting, delete('age') and then retrieve('age') should return None
  
  # Test update existing key
  # Input: (key='name', value='Bob') after already inserted with value 'Alice'
  # Output: After updating, retrieve('name') should return 'Bob'
  
  # Test insertion collision
  # Input: (key='weight', value=70), (key='height', value=175)
  # Output: Both keys should be inserted without issues, and retrieve should return the correct values
  
  # Test non-existent key retrieval
  # Input: retrieve('location') where 'location' was never inserted
  # Output: retrieve('location') should return None
  
output:     
          return None
  