def traceback
      i = @rows - 1
      j = @cols - 1

      while (i > 0 && j > 0)
        score = @matrix[i][j]

        seq1_obj = @seq1[i-1]
        seq2_obj = @seq2[j-1]

        score_align = @matrix[i-1][j-1] + @scoring.score_align(seq1_obj, seq2_obj)
        score_delete = @matrix[i-1][j] + @scoring.score_delete(seq1_obj)
        score_insert = @matrix[i][j-1] + @scoring.score_insert(seq2_obj)

        flags = 0
        need_select = false

        if score == score_align
          flags = :align
          i-=1
          j-=1
        elsif score == score_delete
          flags = :delete
          i-=1
        else
          flags = :insert
          j-=1
        end

        yield(i,j,flags) 
      end # while

      while i > 0
        i-=1
        yield(i,j,:delete) 
      end

      while j > 0
        j-=1
        yield(i,j,:insert) 
      end
    end
def traceback
      i = @rows - 1
      j = @cols - 1

      while (i > 0 && j > 0)
        score = @matrix[i][j]

        seq1_obj = @seq1[i-1]
        seq2_obj = @seq2[j-1]

        score_align = @matrix[i-1][j-1] + @scoring.score_align(seq1_obj, seq2_obj)
        score_delete = @matrix[i-1][j] + @scoring.score_delete(seq1_obj)
        score_insert = @matrix[i][j-1] + @scoring.score_insert(seq2_obj)

        flags = 0
        need_select = false

        if score == score_align
          flags = :align
          i-=1
          j-=1
        elsif score == score_delete
          flags = :delete
          i-=1
        else
          flags = :insert
          j-=1
        end

        yield(i,j,flags) 
      end # while

      while i > 0
        i-=1
        yield(i,j,:delete) 
      end

      while j > 0
        j-=1
        yield(i,j,:insert) 
      end
    end
fill
 Traces backward, finding the alignment.
 @yield [i,j,step]
 @yieldparam i [Integer] The location in sequence one
 @yieldparam j [Integer] The location in sequence two
 @yieldparam step [Integer] The direction we took