Milan - Emotional Italian Fabio Aru made amends for days of "torture" on the Giro d'Italia by soloing to stage 19 victory as Spain's Alberto Contador moved a step closer to his second triumph.
Astana leader Aru had seen his bid for overall victory steadily tamed by the superiority of Contador after the race moved upwards into the high mountains earlier this week.
But the Italian, whose famous 'gurn' when he is in pain has created a social media buzz this week, showed he was down but not out with a stunning attack on Canadian rival Ryder Hesjedal late on the 19km-long final climb to the summit finish at Cervinia.
It allowed Aru to cross the line alone after the 236 km stage from Grevallona with a time of 6hr 24min 13sec, with Hesjedal, of Cannondale, in second place at nearly 30sec behind.
Contador, the 2008 champion, arrived 1:18 behind Aru but maintains a comfortable advantage over his closest rivals ahead of Sunday's final stage to Milan.
"I'm happy, we're one step closer to Milan," said Contador, who is aiming to become the first rider since deceased Italian Marco Pantani to achieve the Giro d'Italia-Tour de France double in the same calendar year.
"Hats-off to Fabio (Aru), he was the strongest today."
Aru moved back up to second overall at 4:37 behind Contador, with Spanish team-mate Landa dropping to third at 5:15 but nearly three minutes clear of Movistar rider Andrey Amador, who is at 8:10 in fourth.
Aru unleashed all his emotions when he crossed the finish line in triumph and told Rai Sport1: "I didn't know what was going through my mind when I crossed the finish line.
"In the past few days I've suffered enormously, on the Mortirolo (climb) it was just torture!
"The suffering on the last 7km today was nothing compared to what I went through on the last 40km of the stage to Mortirolo (Tuesday).
"But today was a sign I'm not giving in, and my determination has led to this amazing win."
After the peloton had reeled in Movistar rider Giovanni Visconti early on the last climb, Astana launched hostilities 9.5km from home but Contador was wise and latched on to Landa's back wheel when the Spaniard attacked off the front.
Hesjedal was quick to take over to lead a six-strong front group and the Canadian upped the ante when he broke away alone to build a 10-second lead.
Aru, sitting third overall overnight at 50 seconds behind team-mate Landa, then took the race by the scruff of the neck with a counter-attack which saw him overtake Hesjedal and ultimately force the big Canadian to surrender arms six kilometres from the finish.
Contador's comfortable overall advantage gave the Spaniard the luxury of simply sitting on the back wheel of Landa, as Aru ended days of struggling on some vicious climbs with a well deserved win.
Contador added: "I just tried to keep an eye on Landa, who was my closest rival in the overall. It's the perfect result for me.
"For the past five months I've been working to win this pink jersey, so the stage win for me today was secondary."
Contador will be virtually confirmed as the race champion if he comes through Saturday's final day in the mountains.
The 20th stage is a 199km slog from Saint Vincent to Sestriere, taking in the brutal climb of the Colle delle Finestre on the way.
It would allow Contador to cap his win in style, but the Spaniard said: "The climb (over the Finestre) is very difficult. Let's see if it's me, or someone else, who attacks."
Leading stage and overall results from the 19th stage of the Giro d'Italia, a 236km run from Gravellona Toce to Cervinia on Friday:
1. Fabio Aru (ITA/AST) 6hr 24min 13sec, 2. Ryder Hesjedal (CAN/CAN) at 28sec, 3. Rigoberto Uran (COL/ETI) 1:10, 4. Tanel Kangert (EST/AST) 1:18, 5. Steven Kruijswijk (NED/LNL) 1:18, 6. Alberto Contador (ESP/TIN) 1:18, 7. Mikel Landa (ESP/AST) 1:18, 8. Leopold Konig (CZE/SKY) 1:21, 9. Mikel Nieve (ESP/SKY) 1:24, 10. Alexandre Geniez (FRA/FDJ) 2:24, 11. Damiano Caruso (ITA/BMC) 2:27, 12. Andrey Amador (CRC/MOV) 2:27, 13. Maxime Monfort (BEL/LOT) 2:49, 14. Yonathan Monsalve (VEN/SOU) 2:49, 15. Yury Trofimov (RUS/KAT) 2:49, 16. Jrgen Van den Broeck (BEL/LOT) 2:49, 17. Darwin Atapuma (COL/BMC) 4:43, 18. Fabio Felline (ITA/TRE) 5:14, 19. Amal Moinard (FRA/BMC) 5:14, 20. Franco Pellizotti (ITA/AND) 5:14
1. Alberto Contador (ESP/TIN) 79hr 48min 40sec, 2. Fabio Aru (ITA/AST) at 4min 37sec, 3. Mikel Landa (ESP/AST) 5:15, 4. Andrey Amador (CRC/MOV) 8:10, 5. Leopold Knig (CZE/SKY) 10:47, 6. Yury Trofimov (RUS/KAT) 11:11, 7. Ryder Hesjedal (CAN/CAN) 12:05, 8. Damiano Caruso (ITA/BMC) 12:14, 9. Steven Kruijswijk (NED/LNL) 12:53, 10. Alexandre Geniez (FRA/FDJ) 15:07, 11. Maxime Monfort (BEL/LOT) 16:58, 12. Jrgen Van den Broeck (BEL/LOT) 18:43, 13. Amal Moinard (FRA/BMC) 25:11, 14. Tanel Kangert (EST/AST) 28:11, 15. Rigoberto Uran (COL/ETI) 30:40, 16. Giovanni Visconti (ITA/MOV) 34:47, 17. Darwin Atapuma (COL/BMC) 36:49, 18. Mikel Nieve (ESP/SKY) 42:28, 19. Paolo Tiralongo (ITA/AST) 57:18, 20. Carlos Betancur (COL/ALM) 1h10:46