{"raw_statement":[{"iden":"background","content":"栈是计算机中经典的数据结构，简单的说，栈就是限制在一端进行插入删除操作的线性表。\n\n栈有两种最重要的操作，即 pop（从栈顶弹出一个元素）和 push（将一个元素进栈）。\n\n栈的重要性不言自明，任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时，想到了一个书上没有讲过的问题，而他自己无法给出答案，所以需要你的帮忙。"},{"iden":"statement","content":"![](https://cdn.luogu.com.cn/upload/image_hosting/5qxy9fz2.png)\n\n宁宁考虑的是这样一个问题：一个操作数序列，$1,2,\\ldots ,n$（图示为 1 到 3 的情况），栈 A 的深度大于 $n$。\n\n现在可以进行两种操作，\n\n1. 将一个数，从操作数序列的头端移到栈的头端（对应数据结构栈的 push 操作）\n2. 将一个数，从栈的头端移到输出序列的尾端（对应数据结构栈的 pop 操作）\n\n使用这两种操作，由一个操作数序列就可以得到一系列的输出序列，下图所示为由 `1 2 3` 生成序列 `2 3 1` 的过程。\n\n![](https://cdn.luogu.com.cn/upload/image_hosting/8uwv2pa2.png)\n\n（原始状态如上图所示）\n\n你的程序将对给定的 $n$，计算并输出由操作数序列 $1,2,\\ldots,n$ 经过操作可能得到的输出序列的总数。"},{"iden":"input","content":"输入文件只含一个整数 $n$（$1 \\leq n \\leq 18$）。\n"},{"iden":"output","content":"输出文件只有一行，即可能输出序列的总数目。"},{"iden":"note","content":"**【题目来源】**\n\nNOIP 2003 普及组第三题"}],"translated_statement":null,"sample_group":[["3\n","5\n"]],"show_order":[],"formal_statement":null,"simple_statement":null,"has_page_source":false}