#include <bits/stdc++.h>
using namespace std;
const int p[5] = {8, 6, 4, 2, 4}, h[5] = {4, 2, 1, 0, 0};
int i, j, k, n, m;
int f[210][210][5][3], v[210][210][5][3];
long long C[210][210];
inline void A(long long &x, long long y) { x = (x + y) % 1000000007; }
inline long long M(long long x, long long y) { return x * y % 1000000007; }
long long cal(int n, int k, int cur, int type) {
  if (!k) return 1;
  if (cur == 5) return 0;
  if (v[n][k][cur][type]) return f[n][k][cur][type];
  v[n][k][cur][type] = 1;
  int i, j;
  long long an = 0;
  if (type == 0) {
    if (!n) return 0;
    int x = cur == 4 ? 2 : 4 - cur;
    for (i = 0; i <= min(x, k); i++)
      A(an, M(cal(n - 1, k - i, cur, 2), C[x][i]));
  } else if (type == 1) {
    if (!n) return 0;
    int x = p[cur], y = h[cur];
    for (i = 0; i <= x; i++)
      for (j = 0; j <= y; j++)
        if (i + 2 * j <= x && i + j <= k)
          A(an, M(cal(n, k - i - j, cur, 0),
                  C[y][j] * C[x - 2 * j][i] % 1000000007));
  } else {
    an = cal(n, k, cur, 1);
    if (cur == 0) {
      if (k > 0) A(an, cal(n, k - 1, 1, 1) * 4 + cal(n, k - 1, 2, 1) * 4);
      if (k > 1)
        A(an, cal(n, k - 2, 2, 1) * 4 + cal(n, k - 2, 4, 1) * 2 +
                  cal(n, k - 2, 3, 1) * 8 + cal(n, k - 2, 5, 1) * 2);
      if (k > 2) A(an, cal(n, k - 3, 3, 1) * 4 + cal(n, k - 3, 5, 1) * 4);
      if (k > 3) A(an, cal(n, k - 4, 5, 1));
    } else if (cur == 1) {
      if (k > 0)
        A(an, cal(n, k - 1, 2, 1) * 2 + cal(n, k - 1, 3, 1) * 2 +
                  cal(n, k - 1, 4, 1));
      if (k > 1) A(an, cal(n, k - 2, 3, 1) * 3 + cal(n, k - 2, 5, 1) * 2);
      if (k > 2) A(an, cal(n, k - 3, 5, 1));
    } else if (cur == 2) {
      if (k > 0) A(an, cal(n, k - 1, 3, 1) * 2 + cal(n, k - 1, 5, 1));
      if (k > 1) A(an, cal(n, k - 2, 5, 1));
    } else if (cur == 4) {
      if (k > 0) A(an, cal(n, k - 1, 3, 1) * 2);
      if (k > 1) A(an, cal(n, k - 2, 5, 1));
    } else if (k > 0)
      A(an, cal(n, k - 1, 5, 1));
  }
  f[n][k][cur][type] = an;
  return an;
}
int main() {
  scanf("%d%d", &n, &k);
  for (i = 0; i <= 200; i++) {
    C[i][0] = 1;
    for (j = 1; j <= i; j++)
      C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % 1000000007;
  }
  long long an = cal(n, k, 0, 2);
  for (i = 1; i <= k; i++) an = an * i % 1000000007;
  printf("%I64d\n", an);
  return 0;
}
