#include <bits/stdc++.h>
using namespace std;
const long long Nfact = 200005;
const long long mod = 1000000007;
const long long Nsieve = 1000005;
vector<bool> is_prime(Nsieve + 1, true);
vector<long long> spf(Nsieve + 1);
void sieve() {
  for (long long i = 1; i < Nsieve + 1; i++) {
    spf[i] = i;
  }
  is_prime[0] = is_prime[1] = false;
  for (long long i = 2; i * i <= Nsieve; i++) {
    if (is_prime[i]) {
      for (long long j = i * i; j <= Nsieve; j += i) {
        if (is_prime[j]) spf[j] = i;
        is_prime[j] = false;
      }
    }
  }
}
void divisors(vector<long long> &divs, long long x) {
  map<long long, long long> mappy;
  while (x != 1) {
    mappy[spf[x]]++;
    x /= spf[x];
  }
  divs.clear();
  divs.push_back(1);
  for (auto p : mappy) {
    long long len = divs.size();
    for (long long q = 0; q < len * p.second; q++) {
      divs.push_back(divs[q] * p.first);
    }
  }
  sort(divs.begin(), divs.end());
}
long long bSearch(long long l, long long r, long long x,
                  vector<long long> arr) {
  while (l <= r) {
    long long m = l + (r - l) / 2;
    if (arr[m] == x) return m;
    if (arr[m] < x)
      l = m + 1;
    else
      r = m - 1;
  }
  return -1;
}
void primeFactors(long long n) {
  while (n % 2 == 0) {
    n = n / 2;
  }
  for (long long i = 3; i <= sqrt(n); i += 2) {
    while (n % i == 0) {
      n = n / i;
    }
  }
  if (n > 2) cout << n << " ";
}
long long power(long long x, long long y, long long p) {
  long long res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
long long modulo(long long a, long long b) {
  long long c = a % b;
  return (c < 0) ? c + b : c;
}
long long mul(long long x, long long y) {
  return ((x % mod) * (y % mod)) % mod;
}
long long inv(long long x) { return power(x, mod - 2, mod); }
long long divide(long long x, long long y) { return mul(x, inv(y)); }
long long fact[Nfact];
long long invFact[Nfact];
void precalc() {
  fact[0] = 1;
  invFact[0] = 1;
  for (long long i = 1; i < Nfact; i++) {
    fact[i] = (fact[i - 1] * i) % mod;
    invFact[i] = power(fact[i], mod - 2, mod);
  }
}
long long nCr(long long n, long long k) {
  if (n < k) return 0;
  return fact[n] * invFact[k] % mod * invFact[n - k] % mod;
}
void solve() {
  long long a, b;
  cin >> a >> b;
  if ((a && b) || (!a && !b)) {
    long long ok = 0;
    if ((2 * a - b >= 0) && (2 * a - b) % 3 == 0) {
      ok++;
    }
    if ((2 * b - a >= 0) && (2 * b - a) % 3 == 0) {
      ok++;
    }
    if (ok == 2) {
      cout << "Yes"
           << "\n";
      return;
    } else {
      cout << "No"
           << "\n";
      return;
    }
  }
  cout << "No"
       << "\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long t;
  cin >> t;
  while (t--) {
    solve();
  }
  cerr << "time taken : " << (float)clock() / CLOCKS_PER_SEC << " secs"
       << "\n";
  return 0;
}
