World record holder Eliud Kipchoge was beaten in the London Marathon as Shura Kitata won a thrilling sprint finish to claim an unexpected victory.
Four-time winner Kipchoge was the favourite, but fell behind with two laps to go and finished eighth.
Ethiopian Kitata pushed ahead of Kenya’s Vincent Kipchumba on the home straight to finish in two hours five minutes and 41 seconds.
Brigid Kosgei, who holds the women’s world record, defended her title.
“I am really disappointed,” Kipchoge said. “I don’t know what happened.
“The last 15km, I felt my right ear was blocked. I had cramp in my hip and leg.
“It just happened in the race. I started well. It’s really cold but I don’t blame the conditions.”
It was supposed to be a straightforward victory for defending champion Kipchoge, with Kenenisa Bekele pulling out injured on Friday.
But the 35-year-old Kenyan, who set a world record of 2:01.39 in 2018, never took the opportunity to pull away from an eight-strong leading pack in a slow start.
Kitata pushed the pace with 15 minutes to go and Kipchoge looked increasingly uncomfortable as he fell back.
Others dropped off too and eventually Kitata rounded the final corner into the home straight with compatriot Sisay Lemma and Kipchumba.
The 24-year-old managed to surge ahead and finish one second before Kipchumba, with Lemma three seconds further back.
“I prepared very well for this race,” Kitata said. “Kenenisa Bekele helped me. I am very happy to win the race.”
Kosgei, 26, went clear of world champion Ruth Chepngetich after mile 18 and finished in 2:18.58, three minutes and three seconds ahead of American Sara Hall.
She was almost five minutes outside her world record set in Chicago last year.
“The weather was not good, so we struggled,” Kosgei, who earned $30,000 (£23,200) in prize money with her win, told BBC Sport. “I struggled up to the moment I finished.
“We have not prepared well due to the pandemic. I will be prepared for good results next year.”
The London Marathon, rescheduled from its traditional April date because of the coronavirus pandemic, is taking place for elite runners only over 19 laps around St James’s Park.