@Override
			public Set<T> next(){
				if(!hasNext()){
					throw new NoSuchElementException();
				}
				if(current == null){
					current = new TreeSet<Integer>();
				}
				else{
					if(current.size() == 0){
						current.add(1);
					}
					else{
						part:{{
							int iterations = 0;
							int tempIndex = current.last();
							while(tempIndex == array.size() - iterations){
								if(tempIndex == current.first()){
									current.clear();
									for(int i = 1; i < iterations + 3; i++){
										current.add(i);
									}
									break part;
								}
								current.remove(tempIndex);
								tempIndex = current.lower(tempIndex);
								iterations++;
							}
							current.remove(tempIndex);
							for(int i = 0; i < iterations + 1; i++){
								current.add(tempIndex + 1 + i);
							}
						}}
					}
				}
				return subsetWith(current);
			}