Linked list

template <typename Key, typename Info>
class Sequence { // singly-linked list
private:
	struct Node {
		Key key;
		Info info;
		Node* next;
	};
	Node* head;
	// assumptions:
	// - no positions
	// - no iterators
}

Key - defines linked-list data
Info - unrelated to list data

Design and create full implementation of the class
Coherent - if {cpp}insert_front exists, {cpp}remove_front must exist as well

For testing purposes, such template will be used

template <typename Key, typename Info>
void split(const Sequence<Key, Info>& source,
			int start, int length1, int length2,
			Sequence<Key, Info>& result1,
			Sequence<Key, Info>& result2)

Example results
source : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
split(source, 4, 2, 3, result1, result2)
result1 : 5 (index = 4), 6, 10, 11
result2 : 7, 8, 9, 12, 13

Class member functions cannot use POSITIONS
this means, we cannot create a member function that:
makes a substring from index 4 and length 2

length1 & length2 should be overwritten
{cpp}split is always successful, so in situation of an 'error' ({cpp}start index is over the length of string) the results should be empty

first write the class, when the class is fully working, only then the split function should be written (it should use class member functions)

The only place where a {cpp}for loop can be used to get to the set position in the list, is the {cpp}split() function when going to the start of the copying.