input: 
  from typing import List
  
  
  class Block:
      def __init__(self, index: int, timestamp: str, data: str, previous_hash: str):
          self.index = index
          self.timestamp = timestamp
          self.data = data
          self.previous_hash = previous_hash
          self.hash = self.hash_block()
  
      def hash_block(self) -> str:
          sha = hashlib.sha256()
          sha.update((str(self.index) + 
                      str(self.timestamp) + 
                      str(self.data) + 
                      str(self.previous_hash)).encode('utf-8'))
          return sha.hexdigest()
  
  def create_genesis_block() -> Block:
      """
      Creates the first block in the blockchain with index 0.
      >>> create_genesis_block()
      Block(index=0, timestamp='2023-10-01 12:00:00', data='Genesis Block', previous_hash='0')
      """
      return Block(0, '2023-10-01 12:00:00', 'Genesis Block', '0')
  
  def next_block(previous_block: Block, data: str) -> Block:
      """
      Creates the next block in the blockchain.
      >>> genesis_block = create_genesis_block()
      >>> next_block(genesis_block, 'Transaction 1')
      Block(index=1, timestamp='2023-10-01 12:01:00', data='Transaction 1', previous_hash='<genesis_block_hash>')
      """
      next_index = previous_block.index + 1
      next_timestamp = '2023-10-01 12:01:00'  # Placeholder timestamp
      return Block(next_index, next_timestamp, data, previous_block.hash)
  
  def create_blockchain(transactions: List[str]) -> List[Block]:
      """
      Creates a blockchain with a genesis block and subsequent blocks for each transaction.
      >>> create_blockchain(['Transaction 1', 'Transaction 2'])
      [Block(index=0, timestamp='2023-10-01 12:00:00', data='Genesis Block', previous_hash='0'), Block(index=1, timestamp='2023-10-01 12:01:00', data='Transaction 1', previous_hash='<genesis_block_hash>'), Block(index=2, timestamp='2023-10-01 12:02:00', data='Transaction 2', previous_hash='<block1_hash>')]
      """
      blockchain = [create_genesis_block()]
      previous_block = blockchain[0]
      for transaction in transactions:
          block_to_add = next_block(previous_block, transaction)
          blockchain.append(block_to_add)
          previous_block = block_to_add
      return blockchain
  
  def print_blockchain(blockchain: List[Block]):
      """
      Prints the details of each block in the blockchain.
      >>> blockchain = create_blockchain(['Transaction 1', 'Transaction 2'])
      >>> print_blockchain(blockchain)
      Block(index=0, timestamp='2023-10-01 12:00:00', data='Genesis Block', previous_hash='0', hash='<genesis_block_hash>')
      Block(index=1, timestamp='2023-10-01 12:01:00', data='Transaction 1', previous_hash='<genesis_block_hash>', hash='<block1_hash>')
      Block(index=2, timestamp='2023-10-01 12:02:00', data='Transaction 2', previous_hash='<block1_hash>', hash='<block2_hash>')
      """
      for block in blockchain:
          print(f"Block(index={block.index}, timestamp='{block.timestamp}', data='{block.data}', previous_hash='{block.previous_hash}', hash='{block.hash}')")
  
output:     
      for block in blockchain:
          print(f"Block(index={block.index}, timestamp='{block.timestamp}', data='{block.data}', previous_hash='{block.previous_hash}', hash='{block.hash}')")
  