keep left/right phrases lists of IntPairs rather than a list of ints with duplicates - avoids re-counting each time
adding reading of sparse vectors