func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   inline string tostring(const T &x) {     ostringstream os;     os << x;     return os.str();   }   inline int toint(const string &s) {     istringstream is(s);     int x;     is >> x;     return x;   }   inline int todecimal(string s) {     int a = 0;     for (int i = 0; i < s.size(); i++) a = 2 * a + (s[i] -  0 );     return a;   }   inline string tobinary(int a) {     string s;     while (a != 0) {       s = (char)(a % 2 +  0 ) + s;       a >>= 1;     }     return s;   }   template <typename T>   inline T sqr(T x) {     return x * x;   }   template <typename T>   T gcd(T a, T b) {     return (b == 0) ? abs(a) : gcd(b, a % b);   }   inline int isvowel(char c) {     if (c ==  a  || c ==  e  || c ==  i  || c ==  o  || c ==  u ) return 1;     return 0;   }   inline int isprime(int a) {     for (int i = 2; i * i <= a; i++)       if (!(a % i)) return 0;     return 1;   }   inline void inp(int &n) {     n = 0;     int ch = getchar();     int sign = 1;     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) sign = -1;       ch = getchar();     }     while (ch >=  0  && ch <=  9 )       n = (n << 3) + (n << 1) + ch -  0 , ch = getchar();     n = n * sign;   }   const int dx4[4] = {0, 0, 1, -1};   const int dy4[4] = {1, -1, 0, 0};   const int dx8[8] = {0, 0, 1, 1, 1, -1, -1, -1};   const int dy8[8] = {1, -1, 0, 1, -1, 1, 0, -1};   class node {    public:     int x, y, z;     node(int a, int b, int c) {       x = a;       y = b;       z = c;     }   };   bool operator<(const node &a, const node &b) { return a.x > b.x; }   bool compare(const node &a, const node &b) { return a.x < b.x; }   const int maxn = 66;   int grid[maxn][maxn];   int n;   void solve() {     memset((grid), (0), sizeof(grid));     grid[0][0] = n;     int moving = 1;     while (moving) {       moving = 0;       for (int i = 0; i < maxn; i++) {         for (int j = 0; j < maxn; j++) {           int x = grid[i][j] / 4;           grid[i + 1][j] += x;           grid[i][j + 1] += x;           if (i) grid[i - 1][j] += x * (i == 1 ? 2 : 1);           if (j) grid[i][j - 1] += x * (j == 1 ? 2 : 1);           grid[i][j] %= 4;           if (x) moving = 1;         }       }     }     int q = 0;     ;     cin >> q;     int x, y;     for (int i = 0; i < q; i++) {       cin >> x >> y;       if (x < 0) x = -x;       if (y < 0) y = -y;       if (x >= maxn || y >= maxn)         cout << 0 << endl;       else         cout << grid[x][y] << endl;     }   }   void input() { cin >> n; }   int main() {     int testcase = 1;     for (int i = 0; i < testcase; i++) {       input();       solve();     }     return 0;   }   