import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;

public class ShuffleIterator<T> implements Iterator<T> {
	private List<T> data;
	private int index;
	private Integer[] tab;
	
	public ShuffleIterator (List<T> data) {
		this.data = data;
		tab = new Integer[data.size()];
		for (int i=0;i<tab.length;i++) tab[i] = i;
		Collections.shuffle(Arrays.asList(tab));
		index = 0;
	}
	
	public boolean hasNext() {
		return (index<tab.length);
	}
	
	public T next() {
		if (hasNext()) {
			return data.get(tab[index++]);
		} else
			throw new NoSuchElementException();
	}
	
	public void remove() {
		throw new UnsupportedOperationException();
	}
}