Sergio Aguero struck twice as Manchester City fought back to beat Monaco 5-3 in a sensational Champions League clash at the Etihad Stadium.
City trailed 2-1 at half-time and 3-2 after an hour of a pulsating last 16 first leg encounter but finished with a flourish to peg back the exhilarating Ligue 1 leaders.
Radamel Falcao scored two and missed a penalty for the visitors while teenage star Kylian Mbappe also got on the scoresheet.
But City, who took an early lead through Raheem Sterling and were controversially denied a penalty themselves, roused themselves when it mattered with late goals from John Stones and Leroy Sane securing victory.
Defensively, it was a horror night for Stones and Nicolas Otamendi but that was not the headline act. Both sides boasted a strong reputation for attacking football and it was a clash that delivered all the promised excitement.
It was immediately apparent why Mbappe is so highly rated. The 18-year-old forward stretched the City defence with a couple of electrifying runs and might have struck early on had Stones not made a timely challenge.
Yet while Monaco looked ruthless on the counter-attack, City were composed in possession and Aguero should have scored from close range.
City grabbed the lead in the 26th minute after brilliant work by Sane, exchanging passes with David Silva and racing towards the six-yard box to tee up Sterling - who stayed narrowly onside to finish.
The hosts' lead did not last long as Caballero, again preferred to Claudio Bravo, gifted possession to Monaco. Within seconds the ball was in the net as Fabinho crossed brilliantly for Falcao to head home.
Controversy erupted when Aguero raced through on goal and went down as goalkeeper Danijel Subasic challenged. It was a strong penalty claim but referee Antonio Mateu Lahoz saw differently and booked Aguero for diving.
Salt was rubbed into City's wounds when Otamendi reacted slowly to a free-kick and and the razor-sharp Mbappe darted into the area and lashed a shot into the roof of the net.
Things almost got worse for City early in the second half as Otamendi was adjudged to have fouled Falcao as the Colombian shot wide, conceding a penalty. The way the decision was made certainly inflamed tensions, with the Spanish referee taking a long time to think, but City escaped.
Falcao's spot-kick was delayed as an object thrown from the crowd landed on the pitch, but the Monaco forward procrastinated further and Caballero saved.
City took advantage to level as Sterling won possession and released Aguero, with the Argentinian drilling his first goal in seven appearances through Subasic's grasp just before the hour.
But again Monaco responded, with Falcao making a fool of Stones in the area and chipping Caballero for a delightful goal.
Mbappe lashed another effort wide soon after but City were not done and levelled when Aguero met a Silva corner with a well-controlled volley.
It was from another corner City took the lead after 77 minutes, this time Stones atoning for his earlier area by reacting quickly to a Yaya Toure flick-on to strike at the back post.
City did not sit back after that, with Aguero drawing a fine save from Subasic, and they claimed their fifth of the night after Silva played Aguero through and the Argentinian set up Sane for a tap-in.