/* -*- coding: utf-8 -*- * * 3431.cc: No.3431 popcount & sum (Easy) - yukicoder */ #include #include #include using namespace std; /* constant */ const int MAX_N = 2000; const int BN = 11; const int BBITS = 1 << BN; const int MOD = 998244353; /* typedef */ using vi = vector; /* global variables */ int bnums[BBITS]; vi bvs[BN + 1]; /* subroutines */ void addmod(int &a, int b) { a = (a + b) % MOD; } /* main */ int main() { int n; scanf("%d", &n); for (int bits = 1, msb = 1; bits < BBITS; bits++) { if ((msb << 1) <= bits) msb <<= 1; bnums[bits] = bnums[bits ^ msb] + 1; } for (int i = 1; i <= n; i++) bvs[bnums[i]].push_back(i); int sum = 0; for (int i = 1; i <= BN; i++) { int l = bvs[i].size(); for (int j = 0; j < l; j++) for (int k = j; k < l; k++) addmod(sum, bvs[i][j] & bvs[i][k]); } printf("%d\n", sum); return 0; }