#include <bits/stdc++.h>
using namespace std;
int cs;
int n;
long long fib[100];
int vis[100][3][3];
long long mem[100][3][3];
int sig[100];
void make(long long num) {
  int i;
  n = 0;
  for (i = 86; i >= 0; i--) {
    if (fib[i] <= num) {
      n = max(n, i);
      num -= fib[i];
      sig[i] = 1;
    } else
      sig[i] = 0;
  }
}
long long get(int pos, int now, int pore) {
  if (pos == -1) {
    if (now || pore)
      return 0;
    else
      return 1;
  }
  long long ret = 0;
  if (vis[pos][now][pore] == cs) return mem[pos][now][pore];
  now += sig[pos];
  if (now > 2) return 0;
  if (now >= 2 && pore >= 1) return 0;
  if (now == 2) {
    ret += get(pos - 1, pore + 1, 1);
  } else if (now == 1) {
    ret += get(pos - 1, pore, 0);
    ret += get(pos - 1, pore + 1, 1);
  } else {
    ret += get(pos - 1, pore, 0);
  }
  now -= sig[pos];
  vis[pos][now][pore] = cs;
  mem[pos][now][pore] = ret;
}
int main() {
  int T, i;
  long long ans, num;
  scanf("%d", &T);
  fib[0] = 1;
  fib[1] = 2;
  for (i = 2; i <= 86; i++) {
    fib[i] = fib[i - 1] + fib[i - 2];
  }
  for (cs = 1; cs <= T; cs++) {
    scanf("%I64d", &num);
    make(num);
    ans = get(n, 0, 0);
    printf("%I64d\n", ans);
  }
  return 0;
}
