Poles to pay tribute to lost President Lech Kaczynski

The body of Polish President Lech Kaczynski is to lie in state in the capital Warsaw as the nation mourns the victims of the Smolensk air crash.
He and 95 others, including many top defence officials and public figures, died when their jet crashed en route to a war memorial service in Russia.
Russia is marking a day of mourning, as relatives arrive in Moscow to try to identify the bodies of the victims.
Russian investigators suspect pilot error caused the crash.
They say the pilots were warned that they were flying too low just before the plane clipped tree-tops in heavy fog, as it was coming in to land at an air base on Saturday morning.
Poland has moved to fill some of the gaps left by the disaster, appointing an acting head of the central bank, while the presidential post has been filled by the parliamentary speaker pending a new election.
The Polish government plane was carrying leaders from across national public life who had been due to attend a memorial for the Polish victims of a World War II massacre by Soviet secret police at Katyn in the Smolensk region.
In what observers see as another sign of reconciliation between Warsaw and Moscow, a Polish film about the Katyn massacre of Polish officers and intellectuals by the Soviets in 1940 has been screened at prime time on a mainstream state Russian television channel, after earlier appearing on a minor channel only.
Commentators in Poland have stressed the irony that so many senior figures were killed making a visit to commemorate victims of a massacre which targeted the elite of Poland's officer corps.
"This is so very much like Katyn, where our head was cut off," said former President Lech Walesa.
Signs of reconciliation
An outpouring of grief has been seen in Polish communities across the world and the country is observing a week of public mourning.
The pavement in front of President Kaczynski's palace in central Warsaw has nearly disappeared from sight, covered now with thousands of small glass pots containing candles laid as a mark of respect, the BBC's Duncan Kennedy reports from the city.
Mr Kaczynski's body was brought back from Russia on Sunday. It was driven through crowd-lined streets to the palace, where it will lie in state from Tuesday.
"He taught Poles how to respect our traditions, how to fight for our dignity, and he made his sacrifice there at that tragic place," mourner Boguslaw Staron, 70, told the Associated Press news agency.
Among those who also died in the crash was the president's wife, Maria.
There is no precedent for a dual funeral involving a head of state and his first lady, but a spokesman for the president's office told Polish media a joint funeral would be held once the bodies of all those killed had been repatriated.
Officials have mentioned Saturday as a possible date for the funeral.
Russians have also been deeply moved by this extraordinary tragedy, the BBC's Richard Galpin reports from Moscow.
Russian President Dmitry Medvedev declared Monday an official day of mourning with flags flying at half mast and television channels cancelling all entertainment programmes.
Large numbers of flowers have been laid outside the Polish embassy here in the capital.
It is just one of many indications of how the disaster on Saturday may ultimately help Russia and Poland bring to an end the hostility which has characterised their relations for so long, our correspondent reports.
Difficult identification
Relatives of some of the air crash victims have been arriving in Moscow in an effort to identify their loved ones.
The plane caught fire in the crash and none of those aboard survived.
Russia's chief investigator, Alexander Bastrykin, has said recordings of conversations between the pilots and air traffic controllers revealed no technical problems with the plane.
Senior Russian prosecutor Vasily Piskarev said 24 bodies had been identified as of Sunday, mostly through their clothing and ID documents. He warned that it would be difficult to identify some of the remains.
The Russian authorities have announced that they will meet all of the expenses of the Polish relatives coming to Moscow, and provide counselling alongside Polish colleagues.
Russian Prime Minister Vladimir Putin flew to Smolensk just hours after the crash and sought to console his Polish counterpart, Donald Tusk.
Russia's handling of the tragedy has won some admiration in Poland.
Witold Waszczykowski, deputy head of Poland's National Security Bureau and one of the few Kaczynski aides not to have been on Saturday's ill-fated flight, was quoted by Reuters as saying: "We did not expect this gentle, kind approach, this personal involvement from Putin.
"Naturally it will have a positive impact on the relationship between our countries."
Poland's ambassador to Russia, Jerzy Bahr, told Polish TV: "We can sense Russian solidarity at every step of the way."
With a swathe cut through Poland's top military leaders, their first deputies have taken over any immediate duties meaning that the country's armed forces are operating normally.
At the central bank, the late Slawomir Skrzypek was replaced temporarily by his deputy, Piotr Wiesiolek.
Parliamentary Speaker Bronislaw Komorowski said he would call for early elections within 14 days, in line with the constitution. The vote must be held within another 60 days.