//n個の帽子－＞1人を固定した順列(n-1)!
#include <stdio.h>
#include <stdlib.h>
int check (long hat[],long try[],long hat_num);
int main(void)
{
  long hat_num,hat[100100],try[101000],flag = 0,i,j;
  char str[16];
  //データ読み込み
  fgets(str,sizeof(str),stdin);
  sscanf(str,"%d",&hat_num);
  for(i=0;i<hat_num;i++)
  {
    scanf("%d", &hat[i]);
  }
//1つ目を固定
  try[0] = hat[0];
//2つめを順番に指定
  for(i=1;i<hat_num;i++)
  {
    try[1] = hat[i];
//3つめ以降は一意に定まる
    for(j=2;j<hat_num;j++)
    {
      try[j] = (try[j-1] ^ try[j-2]);
    }
//その並びの帽子があるかチェック
    flag += check(try,hat,hat_num);
  }
  if(flag > 0)
  {
    printf("Yes\n");
  }
  else
  {
    printf("No\n");
  }
  return 0;
}

int cmp(const void *a,const void *b)
{
  return *(int *)a -*(int *)b;
}
int check (long hat[],long try[],long hat_num)
{
  int out = 0;
  qsort(hat,hat_num,sizeof(int),cmp);
  qsort(try,hat_num,sizeof(int),cmp);
  for(int i=0;i<hat_num;i++)
  {
    if(hat[i] != try[i])
    {
      out++;
    }
  }
  if(out == 0)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}