#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);     }   }   