Hardik Pandya blasted a record-breaking maiden century before a meek Sri Lanka batting display put India firmly on course for a series whitewash on day two of the third Test.
Pandya made Sri Lanka suffer in Pallekele with a brutal 108 off only 96 balls on Sunday in only his third Test, smashing seven sixes to get the tourists up to 487 all out after they were 339-7.
The all-rounder became only the fifth India player to reach three figures for the first time in first-class cricket at Test level and the only man from his country to score over 100 runs before lunch in the longest format.
He also broke the India Test record for runs in an over when Malinda Pushpakumara went for 26 in a fierce onslaught, as a maiden five-wicket Test haul for Lakshan Sandakan (5-132) proved to be bittersweet.
Sri Lanka's day went from bad to worse when they crumbled to 135 all out, Kuldeep Yadav (4-40) proving to be an excellent replacement for the suspended Ravindra Jadeja after Mohammed Shami did the early damage.
Upul Tharanga failed again after Virat Kohli enforced the follow-on, a desperate day for Sri Lanka ending with them facing another crushing loss, closing on 19-1 - trailing by a mammoth 333.
Vishwa Fernando (2-87) had Wriddhiman Saha caught by Dilruwan Perera in the second over of the day, but Kuldeep and Pandya held the hosts up with a stand of 62 for the eighth wicket.
Kuldeep chipped in with 26 before he was dismissed by Sandakan, who also had Shami caught and bowled just after Pandya had reached his half-century.
The dangerous Pandya cut loose in brutal fashion before lunch, setting about Pushpakumara by launching three consecutive sixes down the ground and also hitting two fours in an astonishing over.
An imperious Pandya shielded Umesh Yadav from the strike, the number 11 making only three in a partnership of 66 as he raced to a swashbuckling hundred in a flash with a remarkable exhibition of clean striking in an extended opening session.
Sandakan finally got rid of the centurion with the third ball after lunch, but Shami (2-17) struck Sri Lanka while they were down by snaring openers Dimuth Karunaratne and Tharanga caught behind
Sri Lanka were 38-4 when Pandya trapped Angelo Mathews leg before without scoring and they folded after tea, with only captain Dinesh Chandimal (48) offering notable resistance as Kuldeep came to the fore in a fruitful spell.
Ravichandran Ashwin also took 2-22 in a Sri Lanka first innings which lasted only 37.4 overs and Tharanga chopped an Umesh delivery on to sum up a miserable day for Sri Lanka.