#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

template<typename T>
typename vector<T>::const_iterator FindFirstDuplicate( const vector<T>& v )
{
	vector<T> nv;
	nv.reserve( v.size() );
	for( auto it1 = v.cbegin(); it1 != v.cend(); ++it1 ) // can be const (?)
	{
		auto it2 = find( nv.cbegin(), nv.cend(), *it1 ); // search elem in new vector
		if( it2 == nv.cend() )                          // if not present,
			nv.push_back( *it1 );                      //  add in new vector
		else                                          // else, means we found a dupe
			return v.begin() + ( it2 - nv.cbegin() );
	}
	return v.begin();
}

int main() {
	
	vector<int> v = { 1,2,3,4,5,6,7,8,9,10,3,11 };
	auto it = FindFirstDuplicate(v);
	cout << "first dupe is " << *it << " at " << it - v.cbegin() << endl;

	std::rotate( v.begin(), it, v.end() )	;
	return 0;
}