最不上升也不下降序列
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

在创世的第七日,上帝开始创造序列世界。


“要有排列”


于是,排列诞生了—— 1n 的每个整数恰好出现一次的序列。


“要有子序列”


于是,子序列诞生了——从序列中删除零个或多个元素,保持剩余元素顺序,得到的新序列。


“要有上升”


于是,最长上升子序列(LIS)诞生了——最长的严格递增的子序列。


“要有下降”


于是,最长下降子序列(LDS)诞生了——最长的严格递减的子序列。


上帝看着这一切,沉思片刻,说:


“要既不上升也不下降”


作为序列世界的造物主,你需要构造一个长度为 n 的排列,让 LIS 长度与 LDS 长度之和 最小

输入描述:

输入一个整数 n1 \le n \le 2000),表示排列的长度。

输出描述:

输出一行 n 个整数,表示你构造的排列,其 LIS 长度与 LDS 长度之和最小。


如果有多种可能的排列,输出任意一种即可。

示例1

输入

复制
1

输出

复制
1
示例2

输入

复制
3

输出

复制
1 3 2
示例3

输入

复制
7

输出

复制
1 4 3 2 7 6 5