// 自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只 // 要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也 // 能够保持自己的本色走下去。 ――陈立杰 /************************************* * @contest: 2020 年百度之星・程序设计大赛 - 初赛一. * @user_name: brealid/hkxadpall/zhaoyi20/jmoo/jomoo/航空信奥/littleTortoise. * @time: 2020-07-19. * @language: C++. *************************************/ #define _USE_MATH_DEFINES #include using namespace std; typedef signed char int8; typedef unsigned char uint8; typedef short int16; typedef unsigned short uint16; typedef int int32; typedef unsigned uint32; typedef long long int64; typedef unsigned long long uint64; namespace baseFastio { template inline Int read() { Int flag = 1; char c = getchar(); while ((!isdigit(c)) && c != '-' && c != EOF) c = getchar(); if (c == '-') flag = -1, c = getchar(); Int init = c & 15; while (isdigit(c = getchar())) init = (init << 3) + (init << 1) + (c & 15); return init * flag; } template inline Int read(char &c) { Int flag = 1; c = getchar(); while ((!isdigit(c)) && c != '-' && c != EOF) c = getchar(); if (c == '-') flag = -1, c = getchar(); Int init = c & 15; while (isdigit(c = getchar())) init = (init << 3) + (init << 1) + (c & 15); return init * flag; } template inline void write(Int x) { if (x < 0) putchar('-'), x = ~x + 1; if (x > 9) write(x / 10); putchar((x % 10) | 48); } template inline void write(Int x, char nextch) { write(x); putchar(nextch); } } namespace Fastio { enum io_flags { ignore_int = 1 << 0 }; struct Reader { char endch; Reader() { endch = '\0'; } template Int operator () () { return baseFastio::read(endch);; } Reader& operator >> (io_flags f) { if (f == ignore_int) baseFastio::read(); return *this; } template Reader& operator >> (Int &i) { i = baseFastio::read(endch); return *this; } template inline Int get_int() { return baseFastio::read(); } inline char get_nxt() { return endch; } } read; struct Writer { Writer& operator << (const char *ch) { // char *p = ch; while (*ch) putchar(*(ch++)); return *this; } Writer& operator << (const char ch) { putchar(ch); return *this; } template Writer& operator << (const Int i) { baseFastio::write(i); return *this; } } write; } using namespace Fastio; #define int int64 const int P = 1e9 + 7, P_2 = 1e9 + 5; inline int64 fpow(int64 a, int n) { int64 ret = 1; while (n) { if (n & 1) ret = ret * a % P; a = a * a % P; n >>= 1; } return ret; } #define inv(c) fpow(c, P_2) int n; int a[1007]; signed main() { int T = read.get_int(); while (T--) { int64 ans = 0, tans = 0; read >> n; for (int i = 1; i <= n; i++) { read >> a[i]; if (i != 1) { int k = a[i - 1], m = a[i]; // int rotate = k * m / 2; tans = 0; for (int i = 1; i <= m; i++) { for (int j = 0; j < m; j += 2) { int l = j * k + i * 2, r = (j + 1) * k + i * 2; int bl = l / m, br = r / m; // printf("l~r = %d~%d, bl~br = %d~%d, isdiff = %d\n", l, r, bl, br, (bl % 2) && (br % 2)); if ((bl % 2) && (br % 2)) { tans++; if (tans >= P) tans -= P; } } } tans = tans * inv(m) % P; ans = (ans + tans) % P; } } ans = (ans + a[1] / 2) % P; write << ans << '\n'; } return 0; }