#include <iostream>
#include <vector>
#include <string>
#include <string.h>
#include <map>
#include <cstdio>
using namespace std;
#define ll long long
map < vector<int>, ll > dp;
int a, b;
ll f(int row, vector <int> v)
{
if(dp.count(v))
return dp[v];
if(v[row] == 0)
return dp[v] = f(row+1, v);
ll &ref = dp[v];
ref = 0;
for(ll j = 0; j < b-1; j ++)
{
if( v[row]&(1<<j) && v[row]&(1<<(j+1)) )
{
v[row] = v[row] ^ (1<<j) ^ (1<<(j+1));
ref += f(row, v);
v[row] = v[row] | (1<<j) | (1<<(j+1));
if(row < a-1)
{
if( v[row+1] & (1<<j) )
{
v[row] = v[row] ^ (1<<j);
v[row+1] = v[row+1] ^ (1<<j);
ref += f(row, v);
}
}
return ref;
}
}
if(row < a-1)
{
for(ll j = 0; j < b; j ++)
{
if(v[row]&(1<<j) && v[row+1]&(1<<j))
{
v[row] = v[row] ^ (1<<j);
v[row+1] = v[row+1] ^ (1<<j);
ref += f(row, v);
return ref;
}
}
}
return ref;
}
ll mat[128][128];
int main()
{
//freopen("a.in", "r", stdin);
//freopen("a.out", "w", stdout);
memset(mat, -1, sizeof mat);
for(int x = 1; x <= 100; x ++)
for(int y = 1; y <= 100; y ++)
//while(cin >> a >> b)
{
if(x*y > 100)
continue;
a = x;
b = y;
dp.clear();
//if(a == 0 || b == 0)
//while(true);
if(a < b)
swap(a, b);
vector <int> v(a, 0);
dp[v] = 1;
for(int i = 0; i < a; i ++)
v[i] = (1<<b)-1;
ll res;
if( a*b % 2 == 1 )
res = 0;
else
res = f(0, v);
mat[a][b] = mat[b][a] = res;
//cout << res << endl;
}
while(cin >> a >> b)
{
if(mat[a][b] == -1 && mat[b][a] == -1)
while(true);
//printf("%lld\n", res);
/*if(mat[a][b] == -1)
cout << mat[b][a] << endl;
else
cout << mat[a][b] << endl;*/
if(a < b)
swap(a, b);
printf("mat[%d][%d] = %lldLL;\n", a, b, mat[a][b]);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxjc3RkaW8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCgptYXAgPCB2ZWN0b3I8aW50PiwgbGwgPiBkcDsKaW50IGEsIGI7CgpsbCBmKGludCByb3csIHZlY3RvciA8aW50PiB2KQp7CiAgIGlmKGRwLmNvdW50KHYpKQogICAgICByZXR1cm4gZHBbdl07CgogICBpZih2W3Jvd10gPT0gMCkKICAgICAgcmV0dXJuIGRwW3ZdID0gZihyb3crMSwgdik7CgogICBsbCAmcmVmID0gZHBbdl07CiAgIHJlZiA9IDA7CiAgIGZvcihsbCBqID0gMDsgaiA8IGItMTsgaiArKykKICAgewogICAgICBpZiggdltyb3ddJigxPDxqKSAmJiB2W3Jvd10mKDE8PChqKzEpKSApCiAgICAgIHsKICAgICAgICAgdltyb3ddID0gdltyb3ddIF4gKDE8PGopIF4gKDE8PChqKzEpKTsKICAgICAgICAgcmVmICs9IGYocm93LCB2KTsKICAgICAgICAgdltyb3ddID0gdltyb3ddIHwgKDE8PGopIHwgKDE8PChqKzEpKTsKCiAgICAgICAgIGlmKHJvdyA8IGEtMSkKICAgICAgICAgewogICAgICAgICAgICBpZiggdltyb3crMV0gJiAoMTw8aikgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHZbcm93XSA9IHZbcm93XSBeICgxPDxqKTsKICAgICAgICAgICAgICAgdltyb3crMV0gPSB2W3JvdysxXSBeICgxPDxqKTsKICAgICAgICAgICAgICAgcmVmICs9IGYocm93LCB2KTsKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZWY7CiAgICAgIH0KICAgfQogICBpZihyb3cgPCBhLTEpCiAgIHsKICAgICAgZm9yKGxsIGogPSAwOyBqIDwgYjsgaiArKykKICAgICAgewogICAgICAgICBpZih2W3Jvd10mKDE8PGopICYmIHZbcm93KzFdJigxPDxqKSkKICAgICAgICAgewogICAgICAgICAgICB2W3Jvd10gPSB2W3Jvd10gXiAoMTw8aik7CiAgICAgICAgICAgIHZbcm93KzFdID0gdltyb3crMV0gXiAoMTw8aik7CiAgICAgICAgICAgIHJlZiArPSBmKHJvdywgdik7CiAgICAgICAgICAgIHJldHVybiByZWY7CiAgICAgICAgIH0KICAgICAgfQogICB9CiAgIHJldHVybiByZWY7Cn0KCmxsIG1hdFsxMjhdWzEyOF07CgppbnQgbWFpbigpCnsKICAgLy9mcmVvcGVuKCJhLmluIiwgInIiLCBzdGRpbik7CiAgIC8vZnJlb3BlbigiYS5vdXQiLCAidyIsIHN0ZG91dCk7CgogICBtZW1zZXQobWF0LCAtMSwgc2l6ZW9mIG1hdCk7CgogICBmb3IoaW50IHggPSAxOyB4IDw9IDEwMDsgeCArKykKICAgICAgZm9yKGludCB5ID0gMTsgeSA8PSAxMDA7IHkgKyspCiAgIC8vd2hpbGUoY2luID4+IGEgPj4gYikKICAgewogICAgICBpZih4KnkgPiAxMDApCiAgICAgICAgIGNvbnRpbnVlOwogICAgICBhID0geDsKICAgICAgYiA9IHk7CgogICAgICBkcC5jbGVhcigpOwogICAgICAvL2lmKGEgPT0gMCB8fCBiID09IDApCiAgICAgICAgIC8vd2hpbGUodHJ1ZSk7CgogICAgICBpZihhIDwgYikKICAgICAgICAgc3dhcChhLCBiKTsKCiAgICAgIHZlY3RvciA8aW50PiB2KGEsIDApOwogICAgICBkcFt2XSA9IDE7CiAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhOyBpICsrKQogICAgICAgICB2W2ldID0gKDE8PGIpLTE7CgogICAgICBsbCByZXM7CiAgICAgIGlmKCBhKmIgJSAyID09IDEgKQogICAgICAgICByZXMgPSAwOwogICAgICBlbHNlCiAgICAgICAgIHJlcyA9IGYoMCwgdik7CiAgICAgIG1hdFthXVtiXSA9IG1hdFtiXVthXSA9IHJlczsKICAgICAgLy9jb3V0IDw8IHJlcyA8PCBlbmRsOwogICB9CiAgIHdoaWxlKGNpbiA+PiBhID4+IGIpCiAgIHsKICAgICAgaWYobWF0W2FdW2JdID09IC0xICYmIG1hdFtiXVthXSA9PSAtMSkKICAgICAgICAgd2hpbGUodHJ1ZSk7CgogICAgICAvL3ByaW50ZigiJWxsZFxuIiwgcmVzKTsKICAgICAgLyppZihtYXRbYV1bYl0gPT0gLTEpCiAgICAgICAgIGNvdXQgPDwgbWF0W2JdW2FdIDw8IGVuZGw7CiAgICAgIGVsc2UKICAgICAgICAgY291dCA8PCBtYXRbYV1bYl0gPDwgZW5kbDsqLwogICAgICBpZihhIDwgYikKICAgICAgICAgc3dhcChhLCBiKTsKICAgICAgcHJpbnRmKCJtYXRbJWRdWyVkXSA9ICVsbGRMTDtcbiIsIGEsIGIsIG1hdFthXVtiXSk7CiAgIH0KCiAgIHJldHVybiAwOwp9