Олимпиадный тренинг

Задача . E. Карточная игра


В самой популярной карточной игре в Берляндии используется колода из \(n \times m\) карт. У каждой карты есть два параметра: масть и ранг. Масти в игре пронумерованы от \(1\) до \(n\), а ранги пронумерованы от \(1\) до \(m\). Для каждой комбинации масти и ранга существует ровно одна карта в колоде.

Карта с мастью \(a\) и рангом \(b\) может побить карту с мастью \(c\) и рангом \(d\) в одном из двух случаев:

  • \(a = 1\), \(c \ne 1\) (карта масти \(1\) может побить карту любой другой масти);
  • \(a = c\), \(b > d\) (карта может побить любую другую карту той же масти, но ниже рангом).

В игру играют два игрока. Перед началом игры они получают ровно по половине колоды. Первый игрок выигрывает, если для каждой карты второго игрока он может выбрать свою карту, которая ее может побить, и при этом не будет выбирать свои карты повторно (то есть существует такое разбиение на пары карт первого игрока с картами второго игрока так, чтобы в каждой паре карта первого игрока била карту второго игрока). Иначе выигрывает второй игрок.

Ваша задача — посчитать количество способов распределить карты так, чтобы выиграл первый игрок. Два способа считаются различными, если существует такая карта, что в одном она принадлежит первому игроку, а в другом — второму. Количество способов может быть очень большим, поэтому выведите его по модулю \(998244353\).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 500\)).

Дополнительное ограничение на входные данные: \(m\) четно.

Выходные данные

Выведите единственное целое число — количество способов распределить карты так, чтобы выиграл первый игрок, взятое по модулю \(998244353\).


Примеры
Входные данныеВыходные данные
1 1 4
2
2 2 2
2
3 3 6
1690
4 5 4
568
5 500 500
84693741

time 2000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя