#include #include #define int long long #define endl "\n" #define all(n) n.begin(),n.end() #define rall(n) n.rbegin(),n.rend() #define rep(i, s, n) for (int i = s; i < (int)(n); i++) #define floatset(n) fixed<using vec=vector; templateusing min_queue=priority_queue,greater>; using ll = long long; using ld = long double; using pll = pair; using Graph = vector>; struct Edge1{ll to,cost;}; using WGraph = vec>; struct BellEdge{ll from,to,cost;}; using BGraph=vec; constexpr ll INF = 1e18; constexpr ll mod = 1000000007; constexpr ll MOD = 998244353; constexpr int dx[4]={1,0,-1,0}; constexpr int dy[4]={0,1,0,-1}; template bool chmin(T&a,T b){return a>b?a=b,true:false;} template bool chmax(T&a,T b){return a void Fill(A (&array)[N], const T &val){ fill( (T*)array, (T*)(array+N), val ); } void solve(){ int X,Y; cin>>X>>Y; if(Xbool{ if(a<=1)return false; if(b<=1)return false; if(a-2==0){ return(sa==0); } if(sa%(a-2)==0){ return((sa/(a-2))%2==(b%2)); }else return false; }; int ans=0; for(int i=1;i*i<=sum;i++)if(sum%i==0){ if(i==(sum/i)){ if(f(i,sum/i))ans++; }else{ if(f(i,sum/i))ans++; if(f(sum/i,i))ans++; } } cout<>S; while(S--)solve(); }