Atletico Madrid won a bad-tempered game in Porto on Tuesday to qualify for the last 16 of the Champions League as Liverpool and Ajax both completed the group stage with 100 percent records.
Diego Simeone's Atletico, who lost to Real Madrid in the 2014 and 2016 finals, needed to beat Porto in Portugal to advance to the knockout phase and they duly triumphed 3-1 in a game which featured three red cards.
With tempers flaring, Porto were also reduced to 10 men as Wendell was sent off for elbowing Atletico's Matheus Cunha in the neck, before their substitute goalkeeper Agustin Marchesin also saw red.
With Porto pushing forward in search of the draw they needed to qualify, Atletico got their second goal on the break in the last minute through Angel Correa before Rodrigo De Paul scored their third in injury time. Sergio Oliveira's penalty was a mere consolation for Porto.
Atletico finish second in Group B, a huge 11 points behind group winners Liverpool, who made it six wins out of six in Europe this season by beating AC Milan 2-1 at San Siro despite fielding a virtual reserve side.
Milan had to win to stand a chance of going through and they went ahead midway through the first half through Fikayo Tomori.
Mohamed Salah did start for the visitors and he equalised in the 36th minute before Divock Origi -- who scored a stoppage-time winner in the Premier League at the weekend -- made it 2-1 10 minutes into the second half, heading in after Sadio Mane's shot was saved.
Milan finish bottom of the group in their first Champions League campaign since 2013-14, with Porto parachuting into the Europa League.
- Real Madrid top group -
Elsewhere, Real Madrid secured top spot in Group D with a 2-0 defeat of Inter Milan at the Santiago Bernabeu.
Both sides had already qualified for the last 16 and Real just needed a draw to top the group.
They went ahead through an early Toni Kroos strike, and Inter had Nicolo Barella sent off just after the hour mark before substitute Marco Asensio sealed Real's victory with a stupendous strike.
"Our objective is to go all the way, not just reach the last 16," said Real coach Carlo Ancelotti.
Moldovan debutants Sheriff Tiraspol had already secured third place before Boban Nikolov's injury-time goal earned them a 1-1 draw at bottom side Shakhtar Donetsk, for whom Fernando had opened the scoring.
- Haller strikes again -
Ajax made it six wins out of six in Group C by defeating Sporting Lisbon 4-2 in Amsterdam in a game played behind closed doors due to coronavirus restrictions in the Netherlands.
Sebastien Haller put Ajax ahead with an early penalty for his 10th goal in the group stage, while Brazilian duo Antony and David Neres added further goals and Steven Berghuis was also on target.
Nuno Santos and Bruno Tabata netted for Sporting, who had already secured second place to qualify ahead of Borussia Dortmund.
The Germans crushed 10-man Besiktas 5-0 with Donyell Malen getting the opener and Marco Reus scoring a brace before Erling Haaland came off the bench to score two headers in the second half.
- Mbappe, Messi doubles -
Earlier Manchester City, having already clinched first place in Group A, lost 2-1 at RB Leipzig, with Dominik Szoboszlai and Andre Silva on target for the Germans in their first game since sacking coach Jesse Marsch.
Riyad Mahrez pulled one back for City, who had Kyle Walker sent off late on as Leipzig took third place.
Paris Saint-Germain, who finish second in the group, crushed Club Brugge 4-1 with Kylian Mbappe and Lionel Messi both scoring twice.
Mbappe's goals both came inside the first seven minutes and he then set up Messi's first goal, with the Argentinian adding a penalty as he moved on to five Champions League goals in five appearances this season.