#include <iostream>
#include <list>
#include <vector>

std::vector< std::list<int> > & split( const std::list<int>  & v,
                   int delim, std::vector< std::list<int> >& elems) {

    int i = 0;
    std::list<int>::const_iterator it = v.begin();

    while ( it != v.end()) {
    	std::list<int> l;
    	std::list<int>::const_iterator it3 = l.begin();
        while ( it != v.end() && *it < delim) {
            l.splice( it3++, v, it++ );
        }
        if( it != v.end()) l.splice( it3++, v, it++ );
        elems.push_back( l);
    }
    return elems;
}


std::vector< std::list<int> > split( const std::list<int>  &v, int delim) {
    std::vector< std::list<int> > elems;
    split( v, delim, elems);
    return elems;
}

int main() {
	// your code goes here
	std::list<int> v = { 1, 2, 3, 503, 5, 6, 502, 7, 510, 3, 500, 5, 9};
	std::vector< std::list<int> > vl;
	vl = split( v, 500);
	
	int i = 0;
	while( i < vl.size()) {
	    std::list<int>::const_iterator it = vl[ i].begin();
		while( it !=  vl[ i].end())
		    std::cout << *it++;
		++i;
	}
	
	return 0;
}