if (splitFrom < 0 || splitTo >= splitters.length) throw new IllegalArgumentException();
if (splitIndexes.length < splitters.length) throw new IllegalArgumentException();
// this one knows how to swap two row indexes (a,b)
final int[] g = rowIndexes;
Swapper swapper = new Swapper() {
public void swap(int b, int c) {
int tmp = g[b]; g[b] = g[c]; g[c] = tmp;
}
};