#include <bits/stdc++.h>
using namespace std;
long long i, j, k, l, n, m, s, r, an, K;
const long long pp = 1000000007;
const long long N = 210;
long long f[N][N][5], g[N][N][5], f2[N][N][5];
long long jie[N], jj[N];
long long quick(long long x, long long y) {
  long long xx = 1;
  while (y) {
    if (y & 1) xx = (x * xx) % pp;
    x = (x * x) % pp;
    y /= 2;
  }
  return xx;
}
long long C(long long n, long long m) {
  if (n < m) return 0;
  return jie[n] * jj[n - m] % pp * jj[m] % pp;
}
int main() {
  scanf("%I64d%I64d", &n, &K);
  jie[0] = 1;
  jie[1] = 1;
  for (long long i = 2; i < N; i++) jie[i] = (jie[i - 1] * i) % pp;
  for (long long i = 0; i < N; i++) jj[i] = quick(jie[i], pp - 2);
  g[n + 1][0][0] = 1;
  for (long long i = n; i >= 0; i--) {
    for (long long k = 0; k <= K; k++) {
      f[i][k][0] += g[i + 1][k][0];
      f[i][k + 1][1] += g[i + 1][k][0] * 4 % pp;
      f[i][k + 1][2] += g[i + 1][k][0] * 4 % pp;
      f[i][k + 2][2] += g[i + 1][k][0] * 4 % pp;
      f[i][k + 2][3] += g[i + 1][k][0] * 8 % pp;
      f[i][k + 3][3] += g[i + 1][k][0] * 4 % pp;
      f[i][k + 2][4] += g[i + 1][k][0] * 2 % pp;
      if (k + 4 == K) an += g[i + 1][k][0], an %= pp;
      if (k + 3 == K) an += g[i + 1][k][0] * 4 % pp, an %= pp;
      if (k + 2 == K) an += g[i + 1][k][0] * 2 % pp, an %= pp;
      f[i][k][1] += g[i + 1][k][1];
      f[i][k + 1][2] += g[i + 1][k][1] * 2 % pp;
      f[i][k + 2][3] += g[i + 1][k][1] * 3 % pp;
      f[i][k + 1][3] += g[i + 1][k][1] * 2 % pp;
      f[i][k + 1][4] += g[i + 1][k][1] % pp;
      if (k + 3 == K) an += g[i + 1][k][1] % pp, an %= pp;
      if (k + 2 == K) an += g[i + 1][k][1] * 2 % pp, an %= pp;
      f[i][k][2] += g[i + 1][k][2];
      f[i][k + 1][3] += g[i + 1][k][2] * 2 % pp;
      if (k + 1 == K) an += g[i + 1][k][2] % pp, an %= pp;
      if (k + 2 == K) an += g[i + 1][k][2] % pp, an %= pp;
      f[i][k][3] += g[i + 1][k][3];
      if (k + 1 == K) an += g[i + 1][k][3] % pp, an %= pp;
      f[i][k][4] += g[i + 1][k][4];
      f[i][k + 1][3] += g[i + 1][k][4] * 2 % pp;
      if (k + 2 == K) an += g[i + 1][k][4];
    }
    if (i == 0) continue;
    for (long long k = 0; k <= K; k++)
      for (long long j = 0; j <= 4; j++) {
        long long x = 8 - 2 * j;
        if (j == 4) x = 4;
        long long y;
        if (j == 0) y = 4;
        if (j == 1) y = 2;
        if (j == 2) y = 1;
        if (j > 2) y = 0;
        for (long long xx = 0; xx <= x; xx++)
          for (long long yy = 0; yy <= y; yy++)
            f2[i][k + xx + yy][j] +=
                f[i][k][j] * C(y, yy) % pp * C(x - 2 * yy, xx) % pp,
                f2[i][k + xx + yy][j] %= pp;
      }
    for (long long k = K; k >= 0; k--)
      for (long long j = 0; j <= 4; j++) {
        long long s = 4 - j;
        if (j == 4) s = 2;
        for (long long x = 0; x <= s; x++)
          g[i][k + x][j] += f2[i][k][j] * C(s, x) % pp, g[i][k + x][j] %= pp;
      }
  }
  for (long long i = 0; i <= 4; i++) an += f[0][K][i], an %= pp;
  for (long long i = 2; i <= K; i++) an = (an * i) % pp;
  printf("%I64d", an);
  return 0;
}
