// Deterministic shuffled list iterator using an XORSHIFT RNG
// Each step is O(1), iterator is OSPACE(1)
sclass WeightlessShuffledIterator extends ItIt {
final int n;
int i;
TripletLSFR lsfr;
*(L l) {
n = l(l);
if (n == 0) ret;
int bits = numberOfBitsNeededToRepresentNOptions(l);
lsfr = new TripletLSFR(bits);
}
public bool hasNext() { ret i < n; }
public A next() {
int raw;
do
raw = lsfr.next()-1;
while (raw >= n);
ret raw;
};
}