Хэллоуин --- очень популярное событие, в котором участвуют взрослые и дети всех возрастов. Разумеется, каждому владельцу магазина на главной улице города хочется чем-то выделиться, чтобы привлечь к себе как можно больше покупателей.
Некоторые пытаются выставить у себя на витринах самые красивые или, наоброт, жуткие тыквы, а некоторые пытаются креативно оформить рекламные вывески. Владелец <<Лавки Джека-Потрошителя>> решил <<распотрошить>> свою вывеску, чтобы она стала самой оригинальной на всей улице.
Вывеска представляет из себя таблицу размера n×m, в каждой клетке которой может быть размещена ровно одна буква. Сама рекламная надпись состоит в точности из n⋅m букв. Распотрошить вывеску можно либо по любой строке, либо по любому столбцу. Потрошение по строке номер i, например, выглядит следующим образом:
Симметричным образом происходит потрошение по столбцу --- на нем указывается направление сверху-вниз, в котором выписываются соответствующие буквы, а левая и правая части, если не пусты, рекурсивно потрошатся.
Владельцу лавки стало интересно, сколько есть различных способов распотрошить вывеску. Два способа считаются различными, если хотя бы одна ячейка таблицы, принадлежащая какой-то выделенной строке в одном из способов, принадлежит выделенному столбцу в другом. Обратите внимание, что выделить в таблице 1×1 строку и выделить столбец --- разные способы!
Поскольку число способов может быть достаточно большим, выведите его по модулю 109+7.
В единственной строке через пробел дано два целых числа n и m (1⩽n,m⩽200).
Выведите единственное целое число --- количество способов распотрошить вывеску по модулю 109+7.
Все возможные потрошения во втором примере:
