Match ends, Reading 1, Swansea City 4.
Swansea City stormed into the Championship play-offs by the barest of margins as they beat Reading 4-1 to overtake Nottingham Forest on goal difference on a wildly dramatic final night of the season.
To secure a top-six spot, the Swans needed to win and hope that either Cardiff City would lose at home to bottom side Hull or that Forest would be beaten by Stoke, with a five-goal turnaround in Swansea's favour.
Mission improbable was on in the first half at the Madejski Stadium as Liverpool loanee Rhian Brewster struck with a 30-yard thunderbolt, moments before Forest fell behind.
Despite a red card for Reading's Yakou Meite - who raised a hand to Mike van der Hoorn's face - the hosts equalised with a penalty from George Puscas.
Wayne Routledge's delicate lob restored Swansea's lead in the second half and, although Forest equalised against Stoke to seemingly end their play-off hopes, the Potters fought back to lead 3-1 before Liam Cullen came on to score and give the Swans a 3-1 advantage of their own.
With Steve Cooper's side needing one more goal to pip Forest, Routledge headed in his second in added time to cap one of the most remarkable revivals in living memory to seal Swansea's place in the play-offs and spark chaotic celebrations at the final whistle.
Forest conceded another goal to lose 4-1 at home to Stoke, meaning Swansea overtook Sabri Lamouchi's team to snatch sixth place, and they will now face Brentford - who finished third after missing out on automatic promotion to West Brom - in the play-offs.
It was a scarcely believable climax to a night of staggering twists and turns, even by the Championship's often sense-defying standards.
From the outset, Swansea faced a tall order in their attempt to secure their late passage to the play-offs, such was their reliance on other results.
Few were expecting their bitter rivals Cardiff to lose at home to crisis-ridden bottom side Hull, while it was also unlikely that Forest, who started the evening in fifth place, would be beaten by Stoke by the required margin.
Cooper was kept informed of results elsewhere but all his players could control was their encounter with Reading.
Swansea started brightly and they took the lead after 17 minutes, Brewster picking up possession only a few yards inside the Reading half and driving forward before unleashing a fierce shot which whistled past Rafael Cabral in the home goal.
Almost instantly, Swansea's optimism was dented as Junior Hoilett put Cardiff in front but hope was restored again just moments later as Danny Batth scored for Stoke at Forest.
With overhauling Forest still improbable, the Swans needed to add to their lead, and they threatened to do so as Andre Ayew forced Cabral into a save.
They were given what seemed like a gift when Meite was sent off for the Royals after lashing out at Van der Hoorn, who fell rather theatrically to ensure it was a red card.
But Swansea could not seize that opportunity. To the contrary, Jake Bidwell fouled Andy Rinomhota to concede a penalty, which Puscas converted despite a touch by Swans goalkeeper Erwin Mulder.
With his side only drawing 1-1 at half-time, Cooper sensed he had to be aggressive and he brought on two attacking midfielders, Yan Dhanda and Routledge, during the interval.
After chances for Ayew and Matt Grimes, Routledge produced a moment of magic to deftly control a long ball and, with his next touch, lift it over Cabral and into the net to restore Swansea's lead.
Time was running out for the visitors but, remarkably, Stoke not only retook the lead at Forest but extended their advantage to 3-1.
Cullen came on and half-volleyed a fine finish to give Swansea a lead by the same scoreline in the 84th minute, prompting a frenzied finale which culminated with Routledge heading in from close range to cap the most unlikely of accomplishments.
Swansea's substitutes and staff streamed on to the pitch at the final whistle but they were initially hesitant to celebrate fully as they waited for confirmation of Forest's result.
When they heard of their rivals' 4-1 defeat at the City Ground, Cooper and his players erupted with joy, with even the chief protagonists of this chaotic drama seemingly unable to comprehend the magnitude and sheer improbability of their achievement.
Swansea's work is not done - they face Brentford in the play-offs, with a potential south Wales derby final against Cardiff at Wembley as their reward - but they will carry a great deal of confidence and momentum into those fixtures after pulling off this remarkable feat.
Reading manager Mark Bowen:
"We were a bit slow out of the blocks getting to grips with Swansea but then we came into it and played some decent stuff, controlling possession.
"We were getting a foothold in the game then a shot of theirs from 35 yards flies into the net, then Yakou [Meite] loses his head. Their fella [Mike van der Hoorn] went down like he was shot but he [Meite] did raise a hand to him.
"Down to 10 men we showed character to get back in the game.
"In the last 20 minutes, we had chances but it was poor finishing then at the back-end of the game, maybe it was tiredness on some players' parts. Some of the mistakes we've made defensively have cost us, but that's the way it's gone this season."
Swansea City head coach Steve Cooper:
"What an eventful night. In the end, we've got the job done and that was the objective. I don't think anyone thought it would be that way but it was going to take something extraordinary to happen, and it did.
"We were just okay in the first half, decent on the ball but not so good without it, so we needed to pick it up a little bit in the second half, particularly against 10 men.
"We kept going and, if you look at the four goals we scored, it's our way of playing. We didn't panic, we didn't lump the ball into the box - we waited for our moment and scored four excellent goals.
"Then it was a bit of a blur late on if I'm honest."
- 33Cabral Barbosa
- 5MiazgaSubstituted forBlackettat 81'minutes
- 10SwiftSubstituted forMcClearyat 75'minutes
- 19MeiteBooked at 40mins
- 47PuscasBooked at 82minsSubstituted forBoyéat 85'minutes
- 20Araruna Hoffmann
- 44CabangoSubstituted forCullenat 81'minutes
- 5van der HoornSubstituted forRoutledgeat 45'minutesSubstituted forCelinaat 90+4'minutes
- 6FultonSubstituted forDhandaat 45'minutes
- 22A Ayew
- Steve Martin
- Shots on Target
Second Half ends, Reading 1, Swansea City 4.
Corner, Swansea City. Conceded by Michael Olise.
Corner, Swansea City. Conceded by Tyler Blackett.
Connor Roberts (Swansea City) wins a free kick on the right wing.
Foul by Michael Olise (Reading).
Attempt missed. Lucas Boyé (Reading) right footed shot from the centre of the box misses to the right. Assisted by Liam Moore with a cross.
Substitution, Swansea City. Bersant Celina replaces Wayne Routledge because of an injury.
Goal! Reading 1, Swansea City 4. Wayne Routledge (Swansea City) header from the left side of the six yard box to the centre of the goal. Assisted by Conor Gallagher.
Attempt saved. Michael Olise (Reading) left footed shot from the left side of the box is saved in the centre of the goal. Assisted by Garath McCleary.
Attempt saved. Garath McCleary (Reading) left footed shot from the left side of the box is saved in the centre of the goal. Assisted by Michael Olise.
Attempt missed. Garath McCleary (Reading) left footed shot from outside the box is high and wide to the left. Assisted by Michael Morrison following a corner.
Attempt missed. Liam Moore (Reading) header from the centre of the box misses to the left. Assisted by Michael Olise with a cross following a corner.
Corner, Reading. Conceded by Marc Guehi.
Attempt blocked. Lucas Boyé (Reading) left footed shot from the centre of the box is blocked. Assisted by Garath McCleary.
Foul by Jake Bidwell (Swansea City).
Chris Gunter (Reading) wins a free kick in the defensive half.
Corner, Swansea City. Conceded by Rafael Cabral.
Attempt saved. Matt Grimes (Swansea City) right footed shot from outside the box is saved in the top left corner. Assisted by André Ayew.
Attempt missed. Connor Roberts (Swansea City) left footed shot from outside the box is high and wide to the left. Assisted by Yan Dhanda.