#include using namespace std; using ll = long long; #define rep(i,n) for(int i=0;i<(n);i++) template struct Modint{ public: ll x; Modint(ll x=0) : x((x%mod+mod)%mod) {} Modint operator-() const { return Modint(-x); } Modint& operator+=(const Modint& a){ if(mod<=(x += a.x)) x-=mod; return *this; } Modint& operator-=(const Modint& a){ if(mod<=(x+=mod-a.x)) x-=mod; return *this; } Modint& operator*=(const Modint& a){ (x*=a.x)%=mod; return *this; } Modint& operator++(){ ++x; return *this; } Modint operator++(int){ Modint temp = *this; x++; return temp; } Modint& operator--(){ --x; return *this; } Modint operator--(int){ Modint temp = *this; x--; return temp; } Modint pow(ll t) const{ Modint a=1,b=x; while(t){ if(t&1) a*=b; b*=b; t/=2; } return a; } Modint inv() const { return pow(mod-2); } Modint& operator/=(const Modint& a){ return (*this)*=a.inv(); } friend Modint operator+(const Modint& a, const Modint& b) { return Modint(a)+=b; } friend Modint operator-(const Modint& a, const Modint& b) { return Modint(a)-=b; } friend Modint operator*(const Modint& a, const Modint& b) { return Modint(a)*=b; } friend Modint operator/(const Modint& a, const Modint& b) { return Modint(a)/=b; } friend bool operator==(const Modint& a, const Modint& b) { return (Modint(a).x==b.x); } friend bool operator!=(const Modint& a, const Modint& b) { return (Modint(a).x!=b.x); } friend ostream& operator<<(ostream& os, const Modint& m){ os << m.x; return os; } friend istream& operator>>(istream& is, Modint& m){ is >> m.x; return is; } }; using fp998 = Modint<998244353>; using fp107 = Modint<1000000007>; int main(){ int n; cin >> n; vector a(n); rep(i,n) cin >> a[i]; vector c(20); rep(i,n) rep(j,20) if((i>>j)&1) c[j]++; fp998 ans = 0; rep(i,n){ fp998 x = 0; rep(j,20){ if((i>>j)&1) x += (1<