input: def sierpinski_triangle(n: int) -> None:
      """ Generates the first n rows of the Sierpinski triangle and prints them.
      >>> sierpinski_triangle(1)
      1 
      >>> sierpinski_triangle(2)
      1 
      1 0 
      >>> sierpinski_triangle(3)
      1 
      1 0 
      1 0 1 
      """
output:     if n <= 0:
          return
  
      triangle = [[1]]
      for i in range(1, n):
          row = [1]
          for j in range(1, i):
              row.append(triangle[i-1][j-1] ^ triangle[i-1][j])
          row.append(1)
          triangle.append(row)
  
      for row in triangle:
          print(' '.join(map(str, row)))