new donut splitting algorithm