俄罗斯套娃是一套传统的俄罗斯木制玩偶,它们按尺寸由大到小依次套在一起。打开一个套娃,里面会露出一个同类但更小的玩偶,而那个玩偶里面又套着另一个玩偶,以此类推。
图片来自 Wikimedia Commons
俄罗斯套娃博物馆最近展出了一套设计相似的套娃,它们唯一的区别在于每套中嵌套玩偶的数量。不幸的是,一些过于热心(且显然无人看管)的孩子把这些套娃拆开了,并将所有单个玩偶排成一行。这一行中有 $n$ 个玩偶,每个玩偶都有一个整数尺寸。你需要重新组装这些套娃,但你既不知道套娃的套数,也不知道每套中玩偶的数量。你只知道每一套完整的套娃都由尺寸从 $1$ 到某个数字 $m$ 的连续玩偶组成,其中 $m$ 在不同的套娃之间可能有所不同。
在重新组装套娃时,必须遵循以下规则:
- 你只能将一个玩偶或一组嵌套的玩偶放入一个更大的玩偶中。
- 你只能合并行中相邻的两组玩偶。
- 一旦一个玩偶成为某一组的成员,它就不能被转移到另一组,也不能永久地从该组中分离。只有在合并两组时,它才可以被暂时分离。
你的时间很宝贵,你希望尽可能快地完成这个重组过程。这项任务中唯一耗时的部分是打开并随后关闭玩偶,因此你希望尽量减少操作次数。例如,将组 $[1, 2, 6]$ 与组 $[4]$ 合并时,最少需要打开(并随后关闭)的次数为两次,因为你必须打开尺寸为 $6$ 和 $4$ 的玩偶。将组 $[1, 2, 5]$ 与组 $[3, 4]$ 合并时,你需要执行三次打开操作。
编写一个程序,计算合并所有拆散的套娃组所需的最少打开次数。
输入格式
输入包含一组测试数据。测试数据由两行组成。第一行包含一个整数 $n$ ($1 \le n \le 500$),表示行中单个玩偶的数量。第二行包含 $n$ 个正整数,指定了玩偶在行中出现的顺序及其尺寸。每个尺寸都在 $1$ 到 $500$ 之间(含 $1$ 和 $500$)。
输出格式
显示重新组装套娃时所需的最少打开次数。如果无法完成重组(有些孩子可能过于热心,拿走了一些玩偶),则输出单词 impossible。
样例
输入 1
7 1 2 1 2 4 3 3
输出 1
impossible
输入 2
7 1 2 3 2 4 1 3
输出 2
7