#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>

using namespace std;

int main() {
	const int a[] = {1, 2, 2, 1, 3, 3, 3, 2, 1, 1};
	
	{
		auto i = cbegin(a);
	
		for (auto j = adjacent_find(cbegin(a), cend(a)); j != cend(a); i = j, j = adjacent_find(i, cend(a))) {
			copy(i, ++j, ostream_iterator<decltype(*cbegin(a))>(cout, " "));
			cout << endl;
		}
		copy(i, cend(a), ostream_iterator<decltype(*cbegin(a))>(cout, " "));
		cout << endl;
	}
	
		cout << endl;
		
	{
		auto i = cbegin(a);
	
		for (auto j = adjacent_find(cbegin(a), cend(a), not_equal_to<decltype(*cbegin(a))>()); j != cend(a); i = j, j = adjacent_find(i, cend(a), not_equal_to<decltype(*cbegin(a))>())) {
			copy(i, ++j, ostream_iterator<decltype(*cbegin(a))>(cout, " "));
			cout << endl;
		}
		copy(i, cend(a), ostream_iterator<decltype(*cbegin(a))>(cout, " "));
		cout << endl;
	}
}