#include <bits/stdc++.h>
using namespace std;
stack<char> op;
stack<int> mask;
string s;
int n;
void merge() {
  int a = mask.top();
  mask.pop();
  int b = mask.top();
  mask.pop();
  char o = op.top();
  op.pop();
  int r1, r2;
  int msk = 0;
  for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
      if (((a >> i) & 1) && ((b >> j) & 1)) {
        if (o == '|') {
          r1 = (i & 1) | (j & 1);
          r2 = (i & 2) | (j & 2);
        } else if (o == '&') {
          r1 = (i & 1) & (j & 1);
          r2 = (i & 2) & (j & 2);
        } else {
          r1 = (i & 1) ^ (j & 1);
          r2 = (i & 2) ^ (j & 2);
        }
        msk |= 1 << (r1 + r2);
      }
  mask.push(msk);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> s;
  for (int i = 0; i < (int)s.size(); i++) switch (s[i]) {
      case '?':
        mask.push(6);
        break;
      case '0':
        mask.push(1);
        break;
      case '1':
        mask.push(8);
        break;
      case ')':
        merge();
        break;
      case '(':
        break;
      default:
        op.push(s[i]);
    }
  if (mask.empty()) {
    cerr << "err" << endl;
    return 0;
  }
  if ((mask.top() & 2) || (mask.top() & 4))
    cout << "YES" << endl;
  else
    cout << "NO" << endl;
  return 0;
}
