#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pil = pair<int, ll>;
using pli = pair<ll, int>;
using pll = pair<ll, ll>;
const int inf = (1 << 30) - 1;
const ll INF = (1LL << 60) - 1;
const double pi = acos(-1.0);
const double EPS = 1e-10;
template <typename T>
bool chmax(T &x, const T &y) {
  if (x < y) {
    x = y;
    return true;
  }
  return false;
}
template <typename T>
bool chmin(T &x, const T &y) {
  if (x > y) {
    x = y;
    return true;
  }
  return false;
}
template <typename T>
void in(T &x) {
  cin >> x;
}
template <typename T>
void out(T x) {
  cout << x << '\n';
}
template <typename T>
void out2(T x) {
  cout << x << ' ';
}
template <typename T, typename U>
void in(pair<T, U> &p) {
  cin >> p.first >> p.second;
}
template <typename T, typename U>
void out(pair<T, U> p) {
  cout << p.first << ' ' << p.second << '\n';
}
using vi = vector<int>;
using vll = vector<ll>;
template <typename T>
void in(vector<T> &a) {
  for (int i = 0; i < (int)a.size(); i++) cin >> a[i];
}
template <typename T>
void out(const vector<T> &a) {
  for (auto &e : a) cout << e << '\n';
}
template <typename T>
void out2(const vector<T> &a) {
  for (auto &e : a) cout << e << ' ';
  cout << '\n';
}
template <typename T>
void unique(vector<T> &a) {
  sort(a.begin(), a.end()), a.erase(unique(a.begin(), a.end()), a.end());
}
vector<int> iota(int n) {
  vector<int> ret(n);
  iota(ret.begin(), ret.end(), 0);
  return ret;
}
template <typename T>
vector<int> iota(const vector<T> &a, bool greater = false) {
  vector<int> ret = iota((int)a.size());
  sort(ret.begin(), ret.end(),
       [&](int i, int j) { return (a[i] < a[j]) ^ greater; });
  return ret;
}
struct io_setup {
  io_setup() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout << fixed << setprecision(15);
  }
} io_setup;
const int MOD = 1000000007;
int main() {
  int T;
  in(T);
  int ord[] = {0, 2, 3, 1};
  while (T--) {
    ll N;
    in(N);
    ll x = 1;
    while (x * 4 <= N) x *= 4;
    ll y = (N - x) / 3;
    ll p, q, r;
    p = x + y, q = x * 2;
    while (y) {
      x /= 4;
      q += x * ord[y / x];
      y %= x;
    }
    r = p ^ q;
    if (N % 3 == 1) out(p);
    if (N % 3 == 2) out(q);
    if (N % 3 == 0) out(r);
  }
}
