{"raw_statement":[{"iden":"background","content":"译自 [XXIX Olimpiada Informatyczna – I etap](https://sio2.mimuw.edu.pl/c/oi29-1/dashboard/) [Układanie kart](https://sio2.mimuw.edu.pl/c/oi29-1/p/ukl/)。"},{"iden":"statement","content":"我们用以下方法将一个排列递增排序:\n\n一次操作：记第一个数字为 $k$，在排列中找到 $k-1$（$k=1$ 则取 $n$），把 $k-1$ 拉到排列的第一个位置，中间的数字依次后移。\n\n一次操作的价值：$k-1$（或 $n$）在原排列的位置（这个从 $0$ 开始标号）。\n\n一个排列的价值：进行若干次操作直到排列有序，价值为每次操作的价值之和。\n\n给你 $n,m$，求所有 $n!$ 个排列的价值之和，对 $m$ 取模。"},{"iden":"input","content":"一行两个正整数，$n,m$。"},{"iden":"output","content":"一行一个整数，答案对 $m$ 取模的结果。"},{"iden":"note","content":"对于所有数据，$2\\leq n\\leq 1000000$，$2\\leq m\\leq 10^9$。\n\n| 子任务编号 | 附加限制 | 分数 |\n| :----------: | :----------: | :----------: |\n| 1 | $n\\leq 10$ | 10 |\n| 2 | $n\\leq 2000$ | 60 |\n| 3 |  | 30 |"}],"translated_statement":null,"sample_group":[["2 100\n","1\n"],["3 100\n","15\n"],["10 1000\n","100\n"],["500 100000\n","60000\n"],["100000 1000\n","0\n"]],"show_order":[],"formal_statement":null,"simple_statement":null,"has_page_source":false}