#include <bits/stdc++.h>
using namespace std;
long long power2(long long a, long long b) {
  if (b == 0) return 1;
  if (b == 1) return a;
  long long x = power2(a, b / 2);
  x = x * x;
  if (b % 2) x = x * a;
  return x;
}
long long gcd(long long a, long long b) {
  if (a < b) swap(a, b);
  while (b) {
    long long t = b;
    b = a % b;
    a = t;
  }
  return a;
}
long long mul(long long a, long long b, long long m = 1000000007) {
  return (long long)(a * b) % m;
}
long long add(long long a, long long b, long long m = 1000000007) {
  a += b;
  if (a >= m) a -= m;
  if (a < 0) a += m;
  return a;
}
long long power(long long a, long long b, long long m = 1000000007) {
  if (b == 0) return 1;
  if (b == 1) return (a % m);
  long long x = power(a, b / 2, m);
  x = mul(x, x, m);
  if (b % 2) x = mul(x, a, m);
  return x;
}
bool yoyo(const long long p1, const long long p2) { return p1 > p2; }
int main() {
  long long t, a, b, c, d, i, j, k, l, m, n, x, y, z;
  cin >> n;
  vector<long long> v1;
  long long mon1[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  long long mon2[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  long long us1 = 0, us2 = 0;
  for (i = 0; i < n; i++) {
    cin >> a;
    v1.push_back(a);
  }
  long long err = 0;
  for (i = 0; i < 12; i++) {
    err = 0;
    k = i;
    for (j = 0; j < n; j++) {
      if (v1[j] == mon2[k] && k == 1 && us2 == 1) {
        err = 1;
        break;
      }
      if (v1[j] == mon2[k] && k == 1) {
        us2 = 1;
      }
      if (v1[j] != mon1[k] && v1[j] != mon2[k]) {
        err = 1;
        break;
      }
      k++;
      k = k % 12;
    }
    if (!err) {
      cout << "YES" << endl;
      exit(0);
    }
  }
  cout << "NO" << endl;
  return 0;
}
