// KRZYSZTOF RUDNICKI, 307585, task 1

class List
{
	private:
		struct Node{
			double key;
			Node* next;
		};
		Node* head;
		public:
		int insert(double newVal, double firstVal, double secondVal);
};

int List::insert(double newVal, double firstVal, double secondVal)
{
	Node* curr = head;

	if(head == nullptr) return 0; // we can't insert anything inside empty list
	if(curr->next == nullptr) return 0;  // we can't insert a node between two nodes if there is only one node
	if(curr->next->next == nullptr) // If there is exactly two nodes
	{
		if(head -> key == firstVal && head -> next -> key == secondVal)
		{
			Node* newNode = new Node();
			newNode -> key = newVal;
			newNode -> next = head -> next;
			head -> next = newNode; 
			return 1;
		}else return 0;
	}
	
	int insertions = 0;
	while(curr -> next != nullptr) // If there is three nodes or more
	{
		bool foundKeys = 0;
		if(curr -> key == firstVal && curr -> next -> key == secondVal)
		{
			Node* newNode = new Node();
			newNode -> key = newVal;
			newNode -> next = curr->next;
			curr -> next = newNode; 
			insertions++;
			foundKeys = 1;
			curr = newNode -> next; // If newVal == firstVal, then without this line we will have 
			// infintie loop, to counteract this we skip newly added node. 
		}
		if(!foundKeys) curr = curr -> next;
	}
	
	return insertions;
}

int main()
{
	return 0;
}