#CF2141C. 子数组最小值求和

子数组最小值求和


C. 子数组最小值求和

时间限制: 每测试 11
内存限制: 每测试 256256 兆字节

有一个变量 sumsum,初始值为 00

还有一个数据结构,可以执行以下操作:

  • pushback x — 将值为 xx 的元素添加到结构末尾;
  • pushfront x — 将值为 xx 的元素添加到结构开头;
  • popback — 从结构中移除最后一个元素;
  • popfront — 从结构中移除第一个元素;
  • min — 将结构中当前最小元素的值加到变量 sumsum 上。

操作 popbackpopfrontmin 不能应用于空结构!

使用该数据结构,你希望能够求出数组 aa(包含 nn 个元素)的所有非空子数组的最小值之和

更形式化地说,你的任务是找到一个长度不超过 n(n+2)n \cdot (n + 2) 的命令序列,使得在所有操作执行完毕后,变量 sumsum 等于:

$$\sum_{0 \leq l \leq r < n} \min(a[l], \dots, a[r]) $$

且该序列应对任意可能的数组 aa 都成立。


输入格式

第一行包含一个整数 nn (1n500)(1 \leq n \leq 500) — 数组的元素个数。


输出格式

输出 kk (1kn(n+2))(1 \leq k \leq n \cdot (n + 2)) 条命令。每条命令必须是以下五行之一:

  • "pushback a[i]",其中 ii — 从 00n1n-1 的数字
  • "pushfront a[i]",其中 ii — 从 00n1n-1 的数字
  • "popback"
  • "popfront"
  • "min"

如果存在多个有效答案,输出任意一个即可。


样例

输入

1

输出

3
pushback a[0]
min
popfront

输入

2

输出

6
pushfront a[1]
min
pushback a[0]
min
popfront
min