England survived to live for another day as they outbatted India for a 31-run win in a high-scoring World Cup encounter, keeping their semi-final hopes alive on Sunday.
Opener Jonny Bairstow's hundred (111 off 109 balls) set the platform and a cavalier 54-ball 79 by all-rounder Ben Stokes took England to an imposing 337 for 7 in 50 overs after batting first, neutralising the spin duo of Yuzvendra Chahal and Kuldeep Yadav with some heavy duty hitting.
The total proved to be good enough as Rohit Sharma's (102) 25th ODI hundred and skipper Virat Kohli's (66) fifth consecutive half-century could only take India to 306 for 5 as England captain Eoin Morgan rotated his bowlers effectively at the death.
England, now on 10 points, will need to beat New Zealand in their last game to qualify for the semifinals while India (11 points from 7 games) will need to win at least one of their remaining two games -- against Bangladesh and Sri Lanka -- to seal the last four spot.
India's defeat on Sunday will also make Pakistan's (9 points from 8 matches) chances of qualifying for the semifinals a tad difficult.
Chris Woakes (2/58 in 10 overs) and Liam Plunkett (3/55 in 10 overs) were steady and impressive but it was Jofra Archer's (0/45 in 10 overs) extra pace that the Indian middle-order, including the hard-hitting Hardik Pandya (45 off 33 balls), found difficult to negotiate.
And when Hardik found it difficult, Mahendra Singh Dhoni (42 not out off 31 balls) with his waning power-hitting abilities could not have done better against Archer even though he gave a better account of himself compared to the previous games.
Just as has been the case during this World Cup, Dhoni again got booed by the capacity crowd.
The Barbados born speedster, who bowled fast and full with occasional slower deliveries, had 33 dot balls to his credit.
The difference between the two sides was the number of sixes that England batsmen hit during their innings. Compared to 13 sixes by England, India managed a single six in their entire 50 overs.
KL Rahul (0) did not have the measure of Woakes as he was out for a nine-ball duck. bringing Kohli and Rohit together. They were cautious till the 15th over before opening up against Adil Rashid and Ben Stokes, hitting the duo for a flurry of boundaries.
While Kohli reached his fifth successive half-century of the tournament, it was Rohit who dominated the bowling after reaching his own half-ton.
Their 138-run stand ended when Kohli's slash drive off Plunkett was pouched by substitute fielder James Vince at point.
Rohit and young Rishabh Pant (32 off 29 balls) added 52 off 48 balls and the Indian vice-captain also reached his 25th ODI hundred in the process. However, his innings ended as Woakes got him first ball off his second spell, caught by Jos Buttler.
Pant tried his short-arm pull-shot off Plunkett and was brilliantly caught by a diving Woakes in the deep as Dhoni joined Pandya.
Opting to bat, Bairstow (11 off 109 balls), along with fit-again Jason Roy (66 off 57 balls), added 160 for the first wicket on a track where Kuldeep Yadav (1/72 in 10 overs) and Yuzvendra Chahal (0/88 in 10 overs) had a forgettable day.
Stokes (79) then used the platform to give the total a menacing look in a do-or-ie game for the hosts.
Mohammed Shami (5 for 69) got his maiden five-wicket haul but even he lost his bearings in the last two overs.
Jasprit Bumrah (1/44 in 10 overs) was amazing as ever, being the only bowler to finish with a sub-5 economy rate and the only maiden of the innings.
Bairstow, who stoked a controversy by taking an indirect dig at former England skippers Michael Vaughan and Kevin Pietersen for their criticism, channelized his anger in a positive manner, scoring his eighth ODI hundred.
Chahal and Kuldeep were hit for 12 fours and as many as nine sixes as they hardly got any purchase from the Edgbaston track. Incidentally, Sunday's pitch was not the one which was used during Pakistan's game against New Zealand where Kane Williamson's part-time off-breaks turned right angles.