input: Write a function to generate the first n rows of the Sierpinski triangle using the bit pattern described. The function should print the rows of the triangle with '1' representing filled positions and '0' representing empty positions.
  def sierpinski_triangle(n): 
      # Drawing lines for first row 
      for i in range(2**n): 
          print(' ', end=" ") 
      
      # loop for printing n rows 
      for i in range(1, n+1): 
          # bit pattern for first and 
          # last line of each row 
          for j in range(2**(i-1), 2**i): 
              print('1', end=" ") 
          print() 
          
          # inner rows have opposite bit pattern 
          if i > 1: 
              for j in range(2**(i-1)+1, 2**i-1):  
                  print('0', end=" ") 
              print() 
         
  sierpinski_triangle(6)
  assert sierpinski_triangle(0) == None
  assert sierpinski_triangle(1) == None
  assert sierpinski_triangle(6) == None
output: def sierpinski_triangle(n): 
      for i in range(n):
          for j in range(n-i-1):
              print(' ', end=" ")
          for j in range(2**i):
              if j & (j >> 1):
                  print('0', end=" ")
              else:
                  print('1', end=" ")
          print()