using System; using System.Text; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Numerics; using Compro.IO; using static Compro.Common.ComproUtils; namespace Compro { public class Program { public static void Main(string[] args) { var solver = new AtCoder.Solver(); solver.Solve(); } } } namespace AtCoder { public class Solver { private readonly StreamScanner scanner; public Solver() { scanner = new StreamScanner(Console.OpenStandardInput()); } public void Solve() { var n = scanner.NextInt(); var a = scanner.ScanIntArray(n); Console.WriteLine(check(n, a) ? "Yes": "No"); } private bool check(int n, int[] A) { if (A.Contains(0)) return true; int bit = 0; foreach (var a in A) bit ^= a; if (bit != 0) return false; for (int ng = 0; ng < Math.Min(n, 5); ++ng) { var hash = new HashSet { A[ng], }; for (int i = 0; i < n - 1; ++i) { if (i == ng) continue; if (hash.Contains(A[i])) return true; var nxt = hash.Select(x => x ^ A[i]).ToArray(); foreach (var b in nxt) { hash.Add(b); } } } return false; } } } namespace Compro.Common { public static class ComproUtils { public static readonly long LINF = long.MaxValue / 2; public static readonly int INF = int.MaxValue / 2; public static readonly int[] dr = new[] { 0, 1, 0, -1 }; public static readonly int[] dc = new[] { 1, 0, -1, 0 }; public const string ds = "RBLF"; public static long gcd(long x, long y) => y == 0 ? x : gcd(y, x % y); public static long lcm(long x, long y) => x * (y / gcd(x, y)); /// /// nの約数を列挙する /// /// /// public static IEnumerable GenDivisor(long n) { for (long i = 1L; i * i <= n; ++i) { if (n % i == 0) { yield return i; if (i * i != n) yield return n / i; } } } /// /// aを素因数分解する Dict /// /// /// public static Dictionary PrimeFactorization(long a) { var dict = new Dictionary(); if (a == 0) return dict; int cnt = 0; while (a % 2 == 0) { a /= 2; cnt++; } if (cnt > 0) { dict.Add(2, cnt); } for(long p = 3; p * p <= a; p += 2) { cnt = 0; while (a % p == 0) { cnt++; a /= p; } dict.Add(p, cnt); } if (a > 1) { dict.Add(a, 1); } return dict; } } } namespace Compro.IO { using System.IO; using System.Text; using System.Globalization; using System; public class StreamScanner { private readonly Stream stream; private readonly byte[] buffer = new byte[1024]; private int size, ptr; private bool isEOF = false; public StreamScanner(Stream stream) { this.stream = stream; ptr = 0; size = 0; } private byte read() { if (isEOF) return 0; if (ptr >= size) { ptr = 0; size = stream.Read(buffer, 0, 1024); if (size <= 0) { isEOF = true; return 0; } } return buffer[ptr++]; } public char Char() { byte b = 0; do { b = read(); } while ((b < 33 || 126 < b) && !isEOF); return (char)b; } public string Scan() { var sb = new StringBuilder(); for (var b = Char(); b >= 33 && b <= 126; b = (char)read()) sb.Append(b); return sb.ToString(); } public int NextInt() { return isEOF ? Int32.MinValue : Int32.Parse(Scan(), CultureInfo.InvariantCulture); } public long NextLong() { return isEOF ? Int64.MinValue : Int64.Parse(Scan(), CultureInfo.InvariantCulture); } public double NextDouble() { return isEOF ? Double.MinValue : Double.Parse(Scan(), CultureInfo.InvariantCulture); } public int[] ScanIntArray(int size) { var res = new int[size]; for (int i = 0; i < size; ++i) res[i] = NextInt(); return res; } public long[] ScanLongArray(int size) { var res = new long[size]; for (int i = 0; i < size; ++i) res[i] = NextLong(); return res; } public double[] ScanDoubleArray(int size) { var res = new double[size]; for (int i = 0; i < size; ++i) res[i] = NextDouble(); return res; } } }