input: 
  from typing import List
  
  class Block:
   def __init__(self, index: int, timestamp: str, data: str, previous_hash: str):
   """
   Initialize a block with index, timestamp, data, and previous_hash. Compute and store the hash of the block.
   >>> b = Block(1, "2023-01-01 12:00:00", "Genesis Block", "0")
   >>> b.hash
   'e642f3c26b5c8b521df444d248ff00e116d08d30e96ea6d72a807bcbdb1344b2'
   """
   self.index = index
   self.timestamp = timestamp
   self.data = data
   self.previous_hash = previous_hash
   self.hash = self.hash_block()
  
   def hash_block(self) -> str:
   """
   Compute the SHA-256 hash of the block contents.
   >>> sha = hashlib.sha256()
   >>> sha.update("12023-01-01 12:00:00Genesis Block0".encode('utf-8'))
   >>> sha.hexdigest()
   'e642f3c26b5c8b521df444d248ff00e116d08d30e96ea6d72a807bcbdb1344b2'
   """
   import hashlib
   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_blockchain(blockchain_transactions: List[str]) -> List[Block]:
   """
   Create a blockchain by adding blocks for each item in the list of transactions. The first block is the genesis block.
   >>> blockchain = create_blockchain(["Genesis Block", "Data 1", "Data 2"])
   >>> len(blockchain)
   3
   >>> blockchain[0].hash
   'e642f3c26b5c8b521df444d248ff00e116d08d30e96ea6d72a807bcbdb1344b2'
   """
   blockchain = [create_genesis_block()]
   previous_block = blockchain[0]
  
   for i in range(1, len(blockchain_transactions)):
   block_to_add = next_block(previous_block, blockchain_transactions[i])
   blockchain.append(block_to_add)
   previous_block = block_to_add
  
   return blockchain
  
  def create_genesis_block() -> Block:
   """
   Create and return the genesis block.
   >>> genesis_block = create_genesis_block()
   >>> genesis_block.hash
   'e642f3c26b5c8b521df444d248ff00e116d08d30e96ea6d72a807bcbdb1344b2'
   """
   import datetime
   return Block(0, datetime.datetime.now(), "Genesis Block", "0")
  
  def next_block(last_block: Block, data: str) -> Block:
   """
   Create and return the next block in the blockchain, linking it to the previous block.
   >>> last_block = create_genesis_block()
   >>> next_block(last_block, "Data 1").hash
   '8e8bc3cd7da7f7a9af5aa1d0e7d331e24a3da2f6a19a1d25d967a3a36fe3ec86'
   """
   import datetime
   this_index = last_block.index + 1
   this_timestamp = datetime.datetime.now()
   this_data = data
   this_previous_hash = last_block.hash
   return Block(this_index, this_timestamp, this_data, this_previous_hash)
  
  # Example usage:
  # blockchain_transactions = ["Genesis Block", "Data 1", "Data 2"]
  # blockchain = create_blockchain(blockchain_transactions)
  # print_blockchain()
  
output:     
      def print_blockchain(blockchain: List[Block]) -> None:
          """
          Print the details of each block in the blockchain.
          >>> blockchain = create_blockchain(["Genesis Block", "Data 1", "Data 2"])
          >>> print_blockchain(blockchain)
          Block 0 [2023-01-01 12:00:00]: Genesis Block (Previous Hash: 0)
          Block 1 [2023-01-01 12:00:00]: Data 1 (Previous Hash: e642f3c26b5c8b521df444d248ff00e116d08d30e96ea6d72a807bcbdb1344b2)
          Block 2 [2023-01-01 12:00:00]: Data 2 (Previous Hash: 8e8bc3cd7da7f7a9af5aa1d0e7d331e24a3da2f6a19a1d25d967a3a36fe3ec86)
          """
          for block in blockchain:
              print(f"Block {block.index} [{block.timestamp}]: {block.data} (Previous Hash: {block.previous_hash})")
  