void insert_before_first_max(Node*& L, int x)
{
if (L == nullptr) return L = new Node(x), L->next = L, void();
Node* max_node = L;
for (Node* p = L->next; p != L; max_node = p->data > max_node->data ? p : max_node, p = p->next);
if (x > max_node->data) max_node->next = new Node(x), max_node->next->next = max_node->next;
}