England batter Jonny Bairstow (107) scored a century for the third Test in a row, but was unable to prevent Indian pacers' charge as the visitors took a commanding lead of 257 runs by the end of third day in the fifth Test.
Beginning at day at 84/5, Bairstow and captain Ben Stokes (25) were spurred on by some choice words by Virat Kohli as they piled on quick runs. Bairstow dispatched all India bowlers for boundaries as he reached his fifty in 81 balls.
England received a reprieve when Shardul Thakur dropped an easy catch from Stokes when he was on 18. Indian captain Jasprit Bumrah also dropped his counterpart off Thakur's 38th over before taking a diving catch in the same over to break the partnership.
Sam Billings (36) batted with poise and added 92 for the seventh wicket with Bairstow, who also reached his 10th Test hundred in the process.
Mohammad Shami, who was unlucky on multiple occasions all day, then got the priced wicket of Bairstow who edged to Kohli in slips.
Mohammad Siraj (4-66) ran through the tail as he dismissed Stuart Broad before Billings played on to his stumps. Matthew Potts was the final wicket to fall to a contentious catch by Shreyas Iyer in the slips as India took a lead of 132 runs.
England had a superb start when James Anderson got Shubman Gill with a slip catch in the first over. Hanuma Vihari (11) and Cheteshwar Pujara ensured the visitors went into tea at 37/1.
Stuart Broad got the better of Vihari shortly after tea with a wide ball that was edged to Bairstow at third slip. Virat Kohli (20) looked fluent in his 32-run stand with Pujara, but was dismissed by Joe Root's quick reactive catch after keeper Billings spilled an edge.
First innings' centurion Rishabh Pant (30 not out) continued his good scoring touch with four boundaries, while Pujara motored on to his 32nd Test fifty. The pair added 50 runs for the fourth wicket, extending India's lead beyond 257 runs.
Rain interrupted play twice in the day, but with more than 180 overs possible in the match, a result looks imminent.