filling algorithm