Center Street
题号:NC25351
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在哈乐冰的中央大街上有N个仓买, 我们可以将其抽象为一条线段上有N个顶点,仓买在线段上是均匀分布的,也就是说1号仓买在顶点1这个位置,2号仓买在顶点2这个位置...N号仓买在N这个位置。刚开始这些仓买之间是互相不通的,为了交流,工程师们建了一些路,但是由于资金有限,并不能在两两之间建一条路,他们只能有选择的建一些路。如果两个仓买A,B满足A是B的倍数,则A,B之间可以通一条路,当然这些路是双向的,A可以到B,B可以到A

例如N=8的时候:

仓买1向所有其他仓买通一条路。

2号仓买向4,6,8号仓买通路。

3号仓买仅和6号仓买通路。

4号仓买仅和8号仓买通路。

众所周知,建路需要花费很大一笔钱,所以资本家们需要过路的人需要收取一定费用,如果仓买A,B之间通路,则过路费为元。

现在小M站在1号仓买上,他想得知他分别到达1,2,3...N号仓买的最小花费。虽然他可以直接从1号仓买到达其他仓买,但是可以通过中转的方式让花费更少。你能帮帮他吗?

输入描述:

输入一个整数,表示共有N个仓买。

输出描述:

一行,输出N个整数,以空格隔开,分别代表从1号仓买到其他仓买的最小花费。
示例1

输入

复制
8

输出

复制
0 1 4 5 16 13 36 21

说明

1号到1号仓买自身,不需花费,为0

1号到2号仓买,直接到达,花费

1号到3号仓买,直接到达,花费

1号到4号仓买,直接到达花费9。但是可以先到达2,再通过2到4的路到达,花费为

1号到5号仓买,直接到达,花费16

1号到6号仓买,1->3->6,花费13

1号到7号仓买,1->7,花费36

1号到8号仓买,通过1->2->4->8,花费为21