#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
long long vpow(long long a, long long b, long long p) {
  if (b == 0) return 1;
  if (b == 1) return a;
  long long temp = vpow(a, b / 2, p);
  temp *= temp;
  temp %= p;
  if (b % 2 == 0) return temp;
  temp = temp * a;
  temp %= p;
  return temp;
}
long long inverseMod(long long a, long long b, long long p) {
  long long temp = vpow(b, p - 2, p);
  long long ans = temp * a;
  ans %= p;
  return ans;
}
long long minl(long long a, long long b) {
  if (a > b) return b;
  return a;
}
long long maxl(long long a, long long b) {
  if (a > b) return a;
  return b;
}
struct per {
  long long p, r;
};
long long find(per dsu[], long long i) {
  if (dsu[i].p != i) {
    dsu[i].p = find(dsu, dsu[i].p);
  }
  return dsu[i].p;
}
void merge(per dsu[], long long u, long long v) {
  long long px = find(dsu, u);
  long long py = find(dsu, v);
  if (dsu[px].r > dsu[py].r) {
    dsu[py].p = px;
  } else if (dsu[px].r < dsu[py].r) {
    dsu[px].p = py;
  } else {
    dsu[py].p = px;
    dsu[px].r++;
  }
}
void dfs(vector<long long> adj[], long long u, vector<bool> &visited,
         long long &cnt) {
  visited[u] = true;
  cnt++;
  for (auto i : adj[u]) {
    if (!visited[i]) {
      dfs(adj, i, visited, cnt);
    }
  }
}
long long dx[8] = {2, 1, -1, -2, -2, -1, 1, 2};
long long dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};
void dfs(vector<string> &a, long long i, long long j, long long c, long long n,
         map<long long, char> &mp) {
  a[i][j] = mp[c];
  vector<pair<long long, long long> > ans;
  for (__typeof((8)) k = (0); k < (8); k++) {
    long long x = i + dx[k];
    long long y = j + dy[k];
    if (x >= 0 && x < n && y >= 0 && y < n && a[x][y] == '.') {
      a[x][y] = mp[!c];
      ans.push_back({x, y});
    }
  }
  for (__typeof(((long long)ans.size())) k = (0); k < ((long long)ans.size());
       k++) {
    dfs(a, ans[k].first, ans[k].second, !c, n, mp);
  }
}
void solve() {
  long long c, m, x;
  cin >> c >> m >> x;
  long long ma = min(c, m);
  c -= ma;
  m -= ma;
  if (x + c + m >= ma) {
    cout << ma << endl;
    return;
  } else {
    long long ans = x + c + m;
    long long h = ma - ans;
    ans += (2 * h) / 3;
    cout << ans << endl;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long t = 1;
  cin >> t;
  cout << fixed << setprecision(12);
  while (t--) solve();
  return 0;
}
