Cắm trại

Xem PDF

Nộp bài


Điểm: 15 (thành phần)
Thời gian: 1.0s
Bộ nhớ: 256M

Tác giả:
Dạng bài

Nhân dịp nghỉ hè thầy Hùng quyết định tổ chức cho ITK21 về quê thầy tổ chức cắm trại dã ngoại. Khu vực trại được thể hiện qua một bản đồ dạng lưới gồm \(H\) hàng và \(W\) cột. Các cột song song với nhau được đánh số theo thứ tự từ Tây sang Đông, các hàng song song với nhau được đánh số theo thứ tự từ Bắc xuống Nam. Giao giữa hàng \(i\) và cột \(j\) là khu vực cắm trại \((i,\ j)\). Để tổ chức các trò chơi thì thầy chia lớp ra thành các nhóm khác nhau, mỗi nhóm sẽ cắm một chiếc lều, mỗi chiếc lều trại được cắm ở đúng 1 khu vực và không được có hai nhóm nào cắm trại chung 1 khu vực.

Mỗi chiếc lều được phép xây dựng một cổng ra ở một trong bốn hướng: Đông, Tây, Nam, Bắc. Hướng đặt cổng phải thỏa mãn các điều kiện sau:

  • Nếu hai khu vực \((i_1,\ j)\) và \((i_2,\ j)\) \((1\leq i_1< i_2\leq H;\ 1\leq j\leq W)\) đều đã được dựng trại bởi hai nhóm nào đó, thì cổng của trại ở khu vực \((i_1,\ j)\) bắt buộc phải nằm ở hướng Nam và cổng của trại ở khu vực \((i_2,\ j)\) bắt buộc phải nằm ở hướng Bắc.

  • Nếu hai khu vực \((i,\ j_1)\) và \((i,\ j_2)\) \((1\leq i\leq H;\ 1\leq j_1< j_2\leq W)\) đều đã được dựng trại bởi hai nhóm nào đó, thì cổng của trại ở khu vực \((i,\ j_1)\) bắt buộc phải nằm ở hướng Đông và cổng của trại ở khu vực \((i_2,\ j)\) bắt buộc phải nằm ở hướng Tây.

Hay nói cách khác, nếu hai trại nằm cùng hàng hoặc cùng cột thì cổng phải đặt hướng vào nhau.

Thầy Hùng muốn biết có tất cả bao nhiêu cách khác nhau để các học sinh có thể dựng trại, sao cho ít nhất có một trại được dựng. Biết rằng hai cách khác nhau nếu tồn tại ít nhất một khu vực mà trạng thái cắm trại ở đó khác nhau (chẳng hạn cách này có nhóm cắm, cách kia không có, hoặc hướng đặt cổng trại khác nhau). Lưu ý là số lượng nhóm (hay nói cách khác là số lượng trại) của các cách có thể khác nhau.

Vì kết quả có thể rất lớn nên chỉ cần ìn ra phần dư của đáp án khi chia cho \(10^9+7\).

Input

  • Gồm một dòng duy nhất chứa hai số nguyên dương \(H\) và \(W\) \((1\leq H,\ W\leq 3000)\).

Output

  • In ra một số nguyên dương là số cách cắm trại khác nhau, lấy phần dư khi chia cho \(10^9+7\).

Subtasks

  • Subtask 1: 50% số điểm có \(1\leq H,\ W\leq 300\);
  • Subtask 2: 50% số điểm không có ràng buộc gì thêm.

Ví dụ

Sample input 1
1 2
Sample output 1
9
Sample input 2
4 3
Sample output 2
3252