input: Write a python function to send and receive messages using ZeroMQ in a PUB/SUB pattern.
  assert send_and_receive_message('Hello') == 'Hello'
  assert send_and_receive_message('Test Message') == 'Test Message'
  assert send_and_receive_message('Another Message') == 'Another Message'
output: import zmq
  import threading
  import time
  
  def send_and_receive_message(message):
      def publisher():
          context = zmq.Context()
          socket = context.socket(zmq.PUB)
          socket.bind("tcp://*:5556")
          time.sleep(1)  # Wait a bit for the subscriber to connect
          socket.send_string(message)
          socket.close()
          context.term()
  
      def subscriber():
          context = zmq.Context()
          socket = context.socket(zmq.SUB)
          socket.connect("tcp://localhost:5556")
          socket.setsockopt_string(zmq.SUBSCRIBE, "")
          msg = socket.recv_string()
          socket.close()
          context.term()
          return msg
  
      pub_thread = threading.Thread(target=publisher)
      sub_thread = threading.Thread(target=subscriber)
  
      pub_thread.start()
      sub_thread.start()
  
      pub_thread.join()
      sub_thread.join()
  
      return subscriber()