input: Write a function to divide a given list of numbers into two equal parts such that the difference between the sum of the two parts is minimum. 
  
  def divide_in_two_equal_parts(lst):
      target = sum(lst) // 2
      part1 = []
      part2 = []
      left_sum = 0
      right_sum = 0
      
      for num in lst:
          if left_sum <= right_sum:
              left_sum += num
              part1.append(num)
          else:
              right_sum += num
              part2.append(num)
           
      return part1, part2
  
  assert divide_in_two_equal_parts([2, 3, 4, 5, 6, 7]) == ([2, 3, 4], [5, 6, 7])
  assert divide_in_two_equal_parts([1, 2, 3, 4, 5]) == ([1, 2, 5], [3, 4])
  assert divide_in_two_equal_parts([10, 20, 30, 40]) == ([10, 40], [20, 30])
  assert divide_in_two_equal_parts([1, 1, 1, 1, 1, 1, 1, 1]) == ([1, 1, 1, 1], [1, 1, 1, 1])
  assert divide_in_two_equal_parts([]) == ([], [])
output: def divide_in_two_equal_parts(lst):
      if not lst:
          return [], []
      
      target = sum(lst) // 2
      dp = [False] * (target + 1)
      dp[0] = True
      part1 = []
      part2 = []
      
      for num in lst:
          for i in range(target, num - 1, -1):
              if dp[i - num]:
                  dp[i] = True
      
      for i in range(target, -1, -1):
          if dp[i]:
              part1_sum = i
              break
      
      for num in lst:
          if part1_sum >= num and dp[part1_sum - num]:
              part1.append(num)
              part1_sum -= num
          else:
              part2.append(num)
      
      return part1, part2