input: 
  def sierpinski_triangle(n):
      """
      Generates and prints the first n elements of the Sierpinski triangle.
      The Sierpinski triangle is a fractal and attractive fixed set that is 
      typically represented using binary digits. Each row of the triangle 
      will have bit patterns that reflect the fractal nature. 
      
      >>> sierpinski_triangle(6)
          1 
        1 0 
      1 0 0 
      1       1 
    `
output:     if n <= 0:
          return
  
      triangle = ["1"]
      for i in range(1, n):
          new_row = []
          for j in range(len(triangle[i-1])):
              if j == 0:
                  new_row.append("1")
              else:
                  new_row.append(str(int(triangle[i-1][j]) ^ int(triangle[i-1][j-1])))
          new_row.append("1")
          triangle.append(" ".join(new_row))
  
      max_width = len(triangle[-1])
      for row in triangle:
          print(row.center(max_width))