Russia has flattened part of an apartment building while residents slept in missile attacks near Ukraine's port of Odesa that authorities say killed at least 21 people, hours after Russian troops abandoned the Black Sea outpost of Snake Island.
Locals in the resort village of Serhiivka helped workers pick through the rubble of the nine-storey apartment block, a section of which had been completely destroyed in the early-morning strike.
Walls and windows of a neighbouring 14-storey apartment block were also damaged by the blast wave.
Nearby holiday camps were also hit.
"We came here to the site, assessed the situation together with emergency workers and locals, and together helped those who survived. And those who unfortunately died. We helped to carry them away," said Oleksandr Abramov, who lives nearby and had rushed to the scene when he heard the blast.
Serhiy Bratchuk, spokesman for the Odesa regional administration, said 21 people had been confirmed killed, including a 12-year-old boy.
Among the fatalities was an employee of the Children's Rehabilitation Centre set up by Ukraine's neighbour Moldova in the resort.
Five others were injured.
"These peaceful people made the days of the children of Moldova more beautiful, they took care of their rehabilitation with great love and devotion," Moldovan Health Minister Alla Nemerenko said on her Facebook page.
The regional governor said the missiles had been fired from the direction of the Black Sea.
The Kremlin denied targeting civilians.
"I would like to remind you of the president's words that the Russian Armed Forces do not work with civilian targets," Kremlin spokesman Dmitry Peskov said.
The attack came just four days after Russia struck a crowded shopping mall in central Ukraine, killing at least 19 people.
Ukraine says Russia has escalated its long-range attacks, hitting civilian targets far from the frontline in what Ukraine says are war crimes.
Russia says it has been aiming at military sites.
Thousands of civilians have been killed since Russia invaded Ukraine on February 24.
Russia calls the invasion a "special operation" to root out nationalists.
Ukraine and its allies say it is an unprovoked war of aggression.
The strike on Serhiivka took place shortly after Russia pulled its troops off Snake Island, a strategically important outcrop about 140km southeast of Odesa that it seized on the war's first day.
They had used it to control the northwestern Black Sea.
In his nightly video address, President Volodymyr Zelenskiy hailed what he described as a strategic victory at Snake Island.
"It does not yet guarantee security. It does not yet ensure that the enemy will not come back," he said.
"But this significantly limits the actions of the occupiers. Step by step, we will push them back from our sea, our land and our sky."
Russia has used its control of the sea to impose a blockade on Ukraine, one of the world's biggest grain exporters, threatening to shatter Ukraine's economy and cause global famine.
Russia denies it is to blame for a food crisis, which it says is caused by foreign sanctions hurting its own exports.
Russian President Vladimir Putin met the president of Indonesia on Thursday and spoke by phone on Friday to the prime minister of India, promising both major food importers that Russia would remain a big supplier of grain.
Ukraine said a Russian-flagged cargo ship, the Zhibek Zholy, had left the Russian-occupied port of Berdyansk with a cargo of Ukrainian grain.
Ukraine requested that Turkey detain the vessel, according to a Ukrainian official and document seen by Reuters.
A Russian-installed official said on Thursday that after a stoppage of several months the first cargo ship had left Berdyansk port but he did not name the Zhibek Zholy.
Ukraine has accused Russia of stealing grain from the territories that Russian forces have seized since its invasion.
The Kremlin has previously denied this and did not reply to requests for comment on Friday.
Australian Associated Press
Sign up for our newsletter to stay up to date.