#include <bits/stdc++.h>
int MOD = 1000000007;
long long fact[1000005], finv[1000005], inv[1000005];
void f1(void) {
  fact[0] = fact[1] = 1;
  finv[0] = finv[1] = 1;
  inv[1] = 1;
  for (int i = 2; i < 1000005; i++) {
    fact[i] = fact[i - 1] * i % MOD;
    inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
    finv[i] = finv[i - 1] * inv[i] % MOD;
  }
}
long long f2(int n, int k) {
  int t;
  if (n < k) {
    t = k;
    k = n;
    n = t;
  };
  if (k == 0) return 0;
  if (n < 0 || k < 0) return 0;
  return fact[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}
int main(void) {
  long long N, A[300005], a[65], S, p, i, j, k;
  scanf("%lld", &N);
  for (i = 1; i <= N; i++) scanf("%lld", &A[i]);
  for (i = 0; i < 60; i++) a[i] = 0;
  for (i = 1; i <= N; i++) {
    for (j = 0; j < 60; j++) {
      p = 1;
      for (k = 1; k <= j; k++) p *= 2;
      a[j] += A[i] / p % 2;
    }
  }
  for (i = 0; i < 60; i++) printf("%lld ", a[i]);
  printf("\n");
  S = 0;
  f1();
  for (i = 0; i < 60; i++) {
    p = 1;
    for (j = 1; j <= i; j++) p *= 2;
    p %= MOD;
    S += p * f2(a[i], N - a[i]) % MOD;
  }
  printf("%lld", S);
  return 0;
}
