code: def random_string(max_len=1, min_len=1, chars=string.ascii_letters, **kwargs):
          
          if isinstance(chars, list):
              # assume each element is a str
              chars = ''.join(chars)
  
          if isinstance(chars, str):
              return SeedString(
                  ''.join(random.choice(chars) for _ in range(random.randint(min_len, max_len))))
          elif isfunction(chars):
              # this function is assumed to return/generate one character each time it is called
              return SeedString(
                  ''.join(chars(**kwargs) for _ in range(random.randint(min_len, max_len))))
          else:
              raise ValueError("chars should be string, list, or function pointer")
docs: :param max_len: max value of len(string)
          :param min_len: min value of len(string)
          :param chars: can be sting, list of strings or function pointer.
          Randomly choose one if given a list of strings
          :param kwargs: keyword arguments for chars if it's function pointer
          :return: SeedString()