#include <bits/stdc++.h>
using namespace std;
int k, n;
char s[1000006];
pair<pair<bool, bool>, pair<bool, bool> > dfs() {
  switch (s[k]) {
    case '1':
      return make_pair(make_pair(0, 0), make_pair(0, 1));
    case '0':
      return make_pair(make_pair(1, 0), make_pair(0, 0));
    case '?':
      return make_pair(make_pair(0, 1), make_pair(1, 0));
  }
  k++;
  pair<pair<bool, bool>, pair<bool, bool> > f1 = dfs();
  k++;
  char ch = s[k];
  k++;
  pair<pair<bool, bool>, pair<bool, bool> > f2 = dfs();
  k++;
  switch (ch) {
    case '|':
      return make_pair(make_pair(f1.first.first && f2.first.first,
                                 f1.first.first && f2.first.second ||
                                     f1.first.second && f2.first.second ||
                                     f1.first.second && f2.first.first),
                       make_pair(f1.first.first && f2.second.first ||
                                     f1.second.first && f2.second.first ||
                                     f1.second.first && f2.first.first,
                                 f1.first.second && f2.second.first ||
                                     f1.second.first && f2.first.second ||
                                     f2.second.second || f1.second.second));
    case '&':
      return make_pair(make_pair(f1.first.first || f2.first.first ||
                                     f1.first.second && f2.second.first ||
                                     f1.second.first && f2.first.second,
                                 f1.second.first && f2.second.first ||
                                     f1.second.first && f2.second.second ||
                                     f1.second.second && f2.second.first),
                       make_pair(f1.first.second && f2.first.second ||
                                     f1.first.second && f2.second.second ||
                                     f1.second.second && f2.first.second,
                                 f1.second.second && f2.second.second));
    case '^':
      return make_pair(make_pair(f1.first.first && f2.first.first ||
                                     f1.first.second && f2.first.second ||
                                     f1.second.first && f2.second.first ||
                                     f1.second.second && f2.second.second,
                                 f1.first.first && f2.second.first ||
                                     f1.first.second && f2.second.second ||
                                     f1.second.first && f2.first.first ||
                                     f1.second.second && f2.first.second),
                       make_pair(f1.first.first && f2.first.second ||
                                     f1.first.second && f2.first.first ||
                                     f1.second.first && f2.second.second ||
                                     f1.second.second && f2.second.first,
                                 f1.first.first && f2.second.second ||
                                     f1.first.second && f2.second.first ||
                                     f1.second.first && f2.first.second ||
                                     f1.second.second && f2.first.first));
  }
}
int main() {
  scanf("%d", &n);
  scanf("%s", s);
  pair<pair<bool, bool>, pair<bool, bool> > ans = dfs();
  if (ans.first.second || ans.second.first)
    printf("YES\n");
  else
    printf("NO\n");
  return 0;
}
