#include <cstdio> #include <string> double b[13][3000]; int tran[20000][2]; int H, W, maxMove, nTran; void dfs ( int n, int from, int to ) ...{ if ( n > W ) return; if ( n == W ) ...{ tran[nTran][0] = from; tran[nTran ++][1] = to; return; } dfs ( n +2, ( from <<2 ) +3, ( to <<2 ) +3 ); dfs ( n +1, ( from <<1 ) +1, to <<1 ); dfs ( n +1, from <<1, ( to <<1 ) +1 ); } void dp () ...{ memset ( b, 0x00, sizeof ( b ) ); b[0][( 1<< W ) -1] =1; int i, j; for ( i =0; i < H; i ++ ) for ( j =0; j < nTran; j ++ ) b[i +1][tran[j][1]] += b[i][tran[j][0]]; } int main () ...{ freopen ( "in.txt", "r", stdin ); while ( scanf ( "%d %d", &H, &W ) ) ...{ if ( !H ) break; int t; if ( H < W ) ...{ t = H; H = W; W = t; } nTran =0; dfs ( 0, 0, 0 ); //pt (); dp (); //pb (); printf ( "%.0f ", b[H][( 1<< W ) -1] ); } return0; }