Lewis Hamilton took a lucky win in the Brazilian Grand Prix after Red Bull's Max Verstappen lost the lead in a collision with backmarker Esteban Ocon.
Verstappen was on course for a superb win when Force India's Ocon left his car on the inside of the Red Bull at the Senna S and pitched it into a spin.
The incident dropped the Dutchman back to second place and although he came back at Hamilton, he could not quite catch him.
Verstappen remonstrated with Ocon in the driver weighing area afterwards and pushed the Frenchman three times as he expressed his anger at what had happened.
Both drivers were called to see the race stewards to explain the incident, with Verstappen ordered to carry out "two days of public service" to atone for "making deliberate physical contact with" Ocon.
The punishment has echoes of that served by Sebastian Vettel after his collision with Hamilton at the 2017 Azerbaijan Grand Prix. Vettel ended up taking part in educational activities organised by the FIA, Formula 1's governing body.
Hamilton's win helped Mercedes secure the constructors' championship.
They never looked like losing that as Ferrari's challenge faded but the race win was another matter.
What was Ocon playing at?
Verstappen had driven superbly from the start, and was quickly up into second place by lap 10 after passing both Ferraris and then Valtteri Bottas' Mercedes in succession, holding Hamilton's advantage at about 1.7 seconds.
Hamilton made an early stop for tyres on lap 19, switching on to mediums with the aim of going to the end, but Verstappen stayed out until lap 35.
His pace was so impressive on used super-softs that he almost did enough to rejoin without losing the lead.
In the end, he came back out 2.5secs behind Hamilton, and was on his tail within two laps and passed the Briton on lap 39.
He looked on course for victory until lap 44, when Ocon, who had not long ago pitted for fresh tyres, caught the Red Bull and was trying to unlap himself.
Ocon went around the outside of Verstappen into Turn One and that meant he was on the inside for the right-hander of Turn Two that follows immediately.
Verstappen's right rear caught Ocon's left front as he turned into the corner, pitching into a spin and into the run-off area.
The Dutchman was furious. "What an idiot," he fumed over the radio.
Ocon claimed Verstappen had not left him enough space, but he was handed a 10-second stop-go penalty, the most severe punishment before a disqualification.
"I came out of the box, the first lap I stayed behind, the second lap the team said you can unlap yourself if you want," Ocon said.
"I was side by side and I couldn't disappear and then I saw he turned and we collided but what I am really surprised about is his behaviour after the race. We went on the scales he started to push me and wanted to punch me and stuff and this is not proper."
Never give up
Verstappen was 5.7secs behind Hamilton when he got going again and he soon began to inch back towards the leader.
The car was damaged and Red Bull told him that he had lost some downforce around the front of the side-pod area but he kept coming at Hamilton regardless.
Meanwhile, Hamilton was battling problems with his power-unit, which was having drop-outs, as well as worn tyres, Mercedes asking 52 laps of his set of mediums, about their maximum limit.
Verstappen closed but he did not have enough time and crossed the line 1.5secs behind.
His engineer said: "I don't know what to say, mate." And the Dutchman turned the air blue over the radio, saying: "I know what to say. I hope I don't find him in the paddock."
In the green room before the podium ceremony, Hamilton told Verstappen that Ocon had the right to unlap himself. Verstappen agreed, but added: "But you can't crash." Hamilton responded: "You had more to lose than he did. He had nothing to lose."
Later, Verstappen told the media: "He has the right to unlap himself but still you have to be careful. He has always been an idiot."
In his post-race interview, he said: "You do everything right and then you get taken out when he is being lapped.
"The car was working great but I don't know what to say. I'm happy with second but we should have won."
Mercedes believed Hamiton's engine was a lap from failing mid-race because of an overheating exhaust but they managed to bring the temperatures down and make it last to the end.
Ferrari's Kimi Raikkonen finished third, the red cars unable to challenge for the lead despite what had been perceived as an advantageous strategy.
Raikkonen tracked Bottas in the first stint as the Mercedes hit tyre problems but was unable to pass before Bottas stopped on lap 18.
A longer first stint gave Raikkonen a tyre advantage in the second stint, he caught team-mate Vettel, who was ordered to let him past, but again Raikkonen became stuck behind Bottas.
Eventually, after 10 laps, Raikkonen finally got past, and then Bottas came under pressure from Red Bull's Daniel Ricciardo before Mercedes ordered him in for a second stop on lap 59, with 12 to go.
Ricciardo took fourth, ahead of Bottas, with Vettel, who also made a second stop, a struggling sixth.
Driver of the day
What happens next?
The curtain comes down on the season in Abu Dhabi in two weeks' time. After wins for three different drivers from three different teams in the past three races, who knows what will happen?