Russian missiles have struck a city far from the eastern frontline, killing at least 23 people including three children, Ukrainian officials say.
More than 100 were reported injured in the attack in Vinnytsia, which is south-west of Kyiv and a long way from the heart of the fighting in Donbas.
Three Russian missiles hit an office block and damaged residential buildings.
Ukrainian President Volodymyr Zelensky called it “an open act of terrorism”.
The missiles hit the car park of the nine-storey office block at around 10:50 (07:50 GMT), Ukraine’s State Emergency Service said. Residential buildings were also hit in the centre of Vinnytsia, which has a population of around 370,000.
The Russian defence ministry, which denies targeting civilians, has yet to comment on the strike.
The Ukrainian presidency said the attack had come from Kalibr cruise missiles launched from a submarine in the Black Sea.
Several dozen people were detained following the attack, Ukraine’s minister of internal affairs said, adding that they were being interrogated by the police and Ukraine’s security service.
A senior regional emergency service official told local TV that there was “probably no chance of finding anyone who survived” the attack.
“Every day, Russia kills civilians, kills Ukrainian children, carries out missile attacks on the civilian facilities where there is no military target. What is this, if not an open act of terrorism?” Mr Zelensky said in a statement on social media.
He said that Russia had ended the lives of civilians at the same time as a conference on Russian war crimes was taking place in the Netherlands.
“Russia has thus shown its attitude to international law, to Europe, and to the entire civilised world,” he said.
“After that, no-one can have any doubt that a Special Tribunal on Russian aggression against Ukraine is needed as soon as possible.”
Ukrainian officials said one of the three children who died in the attack was a young girl called Liza, who was returning from a speech therapy session with her mother when the rocket strike hit.
Social media footage reposted by Ukraine’s defence ministry appeared to show Liza pushing a pink pram as she walked alongside her mother earlier in the day.
A pram that resembled the little girl’s was later photographed on its side outside the building hit by the rocket strike. Other images showed what appeared to be the same pram with a child’s body lying beside it.
No such thing as safe in Ukraine anymore
Sarah Rainsford, BBC News, Vinnytsia
There is a child’s pushchair lying on its side on the square here, its pink canvas seat smeared with blood. The ruins of the tall Jubilee building are up ahead, all its windows blown out.
The House of Officers is still smouldering, smoke gusting across the square. There are dozens of firefighters at the scene working through the giant piles of wreckage in front of me. Many cars have been destroyed by fire.
This is a large open space in central Vinnytsia, now a disaster scene.
When the missiles struck this town it was the middle of the morning, a beautiful sunny day with people out and about, as they still are right now.
They would have felt relatively safe in this town, far from the frontlines. There’s been nothing like this attack here before, so when the sirens wailed many will have ignored them.
It’s hard to live life underground. Even now as I am writing this there is an air raid warning – but there are cars and people all around.
And yet there’s no such thing as safe in Ukraine anymore. Russian missile attacks – which Moscow claims are aimed at military targets – can hit anywhere at anytime, with terrible results.
The attack came as EU foreign and justice ministers were due to meet in The Hague for a conference on alleged Russian war crimes.
In a statement released afterwards, the EU called the attack an atrocity and said civilians continued to pay a high toll in the war, “due to Russia’s fundamental disregard of international humanitarian law”.
Ukrainian Foreign Minister Dmytro Kuleba accused Russia of committing “another war crime” with the attack on Vinnytsia.
“We will put Russian war criminals on trial for every drop of Ukrainian blood and tears,” he wrote.
Ukrainian pop singer Roxolana was due to play a show on Thursday night at a concert hall in the city, but the venue was destroyed in the attack.
She posted on Instagram that all of her team were injured and one died. One of her team is fighting for his life,” she said.
“We pray for their lives and the lives of all those affected today,” she wrote. “We will never forgive.”