Your task is to calculate the number of arrays such that:
- each array contains $n$ elements;
- each element is an integer from $1$ to $m$;
- for each array, there is exactly one pair of equal elements;
- for each array $a$, there exists an index $i$ such that the array is strictly ascending before the $i$-th element and strictly descending after it (formally, it means that $a_j < a_{j + 1}$, if $j < i$, and $a_j > a_{j + 1}$, if $j \ge i$).
Input
The first line contains two integers $n$ and $m$ ($2 \le n \le m \le 2 \cdot 10^5$).
Output
Print one integer — the number of arrays that meet all of the aforementioned conditions, taken modulo $998244353$.
Examples
input
3 4
output
6
input
3 5
output
10
input
42 1337
output
806066790
input
100000 200000
output
707899035
Note
The arrays in the first example are:
- $[1, 2, 1]$;
- $[1, 3, 1]$;
- $[1, 4, 1]$;
- $[2, 3, 2]$;
- $[2, 4, 2]$;
- $[3, 4, 3]$.
Solution:
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
typedef double db;
mt19937 mrand(random_device{}());
const ll mod=998244353;
int rnd(int x) { return mrand() % x;}
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
// head
int n,m;
ll ans=1,r=1;
int main() {
scanf("%d%d",&n,&m);
if (n==2) {
puts("0");
return 0;
}
for (int i=1;i<=m;i++) ans=ans*i%mod;
for (int i=1;i<=n-1;i++) r=r*i%mod;
for (int i=1;i<=m-n+1;i++) r=r*i%mod;
ans=ans*powmod(r,mod-2)%mod*(n-2)%mod;
ans=ans*powmod(2,n-3)%mod;
printf("%lld\n",ans);
}
Related posts:
The Brand New Function
Randomized Heap
Road Repairs
Sherlock's bet to Moriarty
Matching Names
Close Vertices
Convex Hull construction using Graham's Scan
Construct the String
Nested Rubber Bands
Bad Days
Manacher's Algorithm - Finding all sub-palindromes in $O(N)$
Nagini
Speckled Band
Gray code
Rowena Ravenclaw's Diadem
EKG
Ebony and Ivory
Powered Addition
Xor-Set
Little Artem and Dance
Arkady and a Nobody-men
JYPnation
New Year Shopping
Choosing Subtree is Fun
World Eater Brothers
New Year Book Reading
Mischievous Mess Makers
Restore Cube
Aztec Catacombs
Scheduling jobs on one machine
AND Segments
May Holidays