import macros;macro ImportExpand(s:untyped):untyped = parseStmt($s[2]) ImportExpand "neguse/tmpl.nim" <=== "when not declared NEGUSE_TMPL:\n const NEGUSE_TMPL* = 1\n {.warning[UnusedImport]: off.}\n {.hint[XDeclaredButNotUsed]: off.}\n import algorithm\n import sequtils\n import tables\n import macros\n import math\n import sets\n import strutils\n import strformat\n import sugar\n import heapqueue\n import streams\n import deques\n import bitops\n import std/lenientops\n import options\n # ACL\n #[ import atcoder/header ]#\n when not declared ATCODER_HEADER_HPP:\n const ATCODER_HEADER_HPP* = 1\n {.hints:off checks:off assertions:on optimization:speed.}\n {. warning[UnusedImport]:off .}\n import std/algorithm as algorithm_lib\n import std/sequtils as sequils_lib\n import std/tables as tables_lib\n import std/macros as macros_lib\n import std/math as math_lib\n import std/sets as sets_lib\n import std/strutils as strutils_lib\n import std/streams as streams_lib\n import std/strformat as strformat_lib\n \n proc scanf*(formatstr: cstring){.header: \"\", varargs.}\n proc getchar*(): char {.header: \"\", varargs.}\n proc nextInt*(base:int = 0): int =\n scanf(\"%lld\",addr result)\n result -= base\n proc nextFloat*(): float = scanf(\"%lf\",addr result)\n proc nextString*(): string =\n var get = false;result = \"\"\n while true:\n var c = getchar()\n if int(c) > int(' '): get = true;result.add(c)\n elif get: break\n template `max=`*(x,y:typed):void = x = max(x,y)\n template `min=`*(x,y:typed):void = x = min(x,y)\n template inf*(T): untyped = \n when T is SomeFloat: T(Inf)\n elif T is SomeInteger: T.high div 2\n else: assert(false)\n \n discard\n #[ import atcoder/extra/other/inf ]#\n when not declared ATCODER_INF_HPP:\n const ATCODER_INF_HPP* = 1\n import sequtils\n template inf*(T: typedesc): untyped =\n when T is SomeFloat: T(Inf)\n elif T is SomeInteger: T.high div 2\n else:\n static: assert(false)\n template infRepr*[T](x: T): string =\n when T is seq or T is array:\n \"@[\" & x.mapIt(it.infRepr).join(\", \") & \"]\"\n elif x is SomeInteger or x is SomeFloat:\n when x is SomeUnsignedInt:\n if x >= T.inf: \"inf\"\n else: $x\n else:\n if x >= T.inf: \"inf\"\n elif x <= -T.inf: \"-inf\"\n else: $x\n else:\n $x\n proc isInf*[T](x: T): bool = x >= T.inf\n proc `∞`*(T: typedesc): T = T.inf\n proc `*!`*[T: SomeInteger](a, b: T): T =\n if a == T(0) or b == T(0): return T(0)\n var sgn = T(1)\n if a < T(0): sgn = -sgn\n if b < T(0): sgn = -sgn\n let a = abs(a)\n let b = abs(b)\n if b > T.inf div a: result = T.inf\n else: result = min(T.inf, a * b)\n result *= sgn\n proc `+!`*[T: SomeInteger](a, b: T): T =\n result = a + b\n result = min(T.inf, result)\n result = max(-T.inf, result)\n proc `-!`*[T: SomeInteger](a, b: T): T =\n result = a - b\n result = min(T.inf, result)\n result = max(-T.inf, result)\n discard\n\n const INF = int.inf\n const mod998 = 998244353\n const mod107 = 1000000007\n const mod109 = 1000000009\n\n # 演算子\n proc `%`(x: int, y: int): int = (((x mod y)+y) mod y)\n proc `//`(x: int, y: int): int = (((x) - (x%y)) div (y))\n proc `%=`(x: var int, y: int): void = x = x%y\n proc `//=`(x: var int, y: int): void = x = x//y\n proc `**`(x: int, y: int): int = x^y\n proc `**=`(x: var int, y: int): void = x = x^y\n proc `^`(x: int, y: int): int = x xor y\n proc `|`(x: int, y: int): int = x or y\n proc `&`(x: int, y: int): int = x and y\n proc `>>`(x: int, y: int): int = x shr y\n proc `<<`(x: int, y: int): int = x shl y\n proc `~`(x: int): int = not x\n proc `^=`(x: var int, y: int): void = x = x ^ y\n proc `&=`(x: var int, y: int): void = x = x & y\n proc `|=`(x: var int, y: int): void = x = x | y\n proc `>>=`(x: var int, y: int): void = x = x >> y\n proc `<<=`(x: var int, y: int): void = x = x << y\n proc `[]`(x: int, n: int): bool = (x and (1 shl n)) != 0\n proc mul128(a, b, m: int): int {.importcpp: \"(__int128)(#) * (#) % (#)\", nodecl.}\n proc powmod(a, n, m: int): int =\n result = 1\n var\n a = a\n n = n\n while n > 0:\n if n mod 2 != 0: result = mul128(result, a, m)\n if n > 1: a = mul128(a, a, m)\n n = n shr 1\n return result\n # 入出力\n proc print(args: varargs[string, infRepr]) = echo args.join(\" \")\n let readNext = iterator(getsChar: bool = false): string {.closure.} =\n while true:\n var si: string\n try: si = stdin.readLine\n except EOFError: yield \"\"\n for s in si.split:\n if getsChar:\n for i in 0.. b:\n a = b\n result = true\n else:\n result = false\n proc chmax[T](a: var T, b: T): bool {.discardable.} =\n if a < b:\n a = b\n result = true\n else:\n result = false\n iterator range(stop: int): int =\n for i in 0.. 0:\n while i < stop:\n yield i\n i += step\n elif step < 0:\n while i > stop:\n yield i\n i += step\n else:\n discard\n iterator permutation[T](a: openArray[T], r: int): seq[T] =\n let n = a.len\n var p = toSeq(0..= 2: print("Yes") quit() let M = 1<<13 # dp[i][j][k] := i個目までみてxor総和をjとできるか? kは1個以上使ったかフラグ var dp = newSeqWith(N+1, newSeqWith(M, @[false, false])) dp[0][0][0] = true for i in range(N-1): for j in range(M): dp[i+1][j][0] = dp[i+1][j][0] or dp[i][j][0] dp[i+1][j][1] = dp[i+1][j][1] or dp[i][j][1] dp[i+1][j^A[i]][1] = dp[i+1][j^A[i]][1] or dp[i][j][0] or dp[i][j][1] if dp[N-1][0][1]: print("Yes") else: print("No")