Given is an integer N. How many permutations (P_0,P_1,\cdots,P_{2N-1}) of (0,1,\cdots,2N-1) satisfy the following condition?

* For each i (0 \leq i \leq 2N-1), N^2 \leq i^2+P_i^2 \leq (2N)^2 holds.



Since the number can be enormous, compute it modulo M.

Constraints

* 1 \leq N \leq 250
* 2 \leq M \leq 10^9
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N M


Output

Print the number of permutations that satisfy the condition, modulo M.

Examples

Input

2 998244353


Output

4


Input

10 998244353


Output

53999264


Input

200 998244353


Output

112633322
#include <bits/stdc++.h>
using namespace std;
int mod;
int dp[510][510], n;
pair <int, int> a[510];
inline int f(int x) {
    static int now = 2 * n - 1;
    while (now >= 0 && x * x + now * now > 4 * n * n) now--;
    return now + 1;
}
inline int g(int x) {
    static int now = 2 * n - 1;
    while (now >= 0 && x * x + now * now >= n * n) now--;
    return now + 1;
}
int main() {
    cin >> n >> mod;
    for (int i = 0; i < 2 * n; i++) a[i] = i >= n ? make_pair(f(i), 0) : make_pair(g(i), f(i));
    sort(a, a + n + n);
    int ans = 0;
    for (int k = 0; k <= n; k++) {
        int cnt = 0;
        memset(dp, 0, sizeof dp);
        dp[0][0] = 1;
        for (int i = 0; i < 2 * n; i++) {
            for (int j = 0; j <= k; j++) {
                if (a[i].second == 0) {
                    dp[i + 1][j] = (dp[i + 1][j] + 1ll * dp[i][j] * (a[i].first - j - cnt)) % mod;
                }
                else {
                    dp[i + 1][j] = (dp[i + 1][j] + 1ll * dp[i][j] * (a[i].second - n - k - (i - cnt - j))) % mod;
                    dp[i + 1][j + 1] = (dp[i + 1][j + 1] + 1ll * dp[i][j] * (a[i].first - cnt - j)) % mod;
                }
            }
            if (a[i].second == 0) cnt++;
        }
        ans = (ans + 1ll * (k & 1 ? mod - 1 : 1) * dp[2 * n][k]) % mod;
    }
    return cout << ans << endl, 0;
}