#include <bits/stdc++.h>
using namespace std;
template <typename T>
T Abs(T first) {
  return (first < 0 ? -first : first);
}
template <typename T>
T Sqr(T first) {
  return (first * first);
}
string plural(string s) {
  return (int((s).size()) && s[int((s).size()) - 1] == 'x' ? s + "en"
                                                           : s + "s");
}
const int INF = (int)1e9;
const long double EPS = 1e-12;
const long double PI = acos(-1.0);
bool Read(int &first) {
  char c, r = 0, n = 0;
  first = 0;
  for (;;) {
    c = getchar();
    if ((c < 0) && (!r)) return (0);
    if ((c == '-') && (!r))
      n = 1;
    else if ((c >= '0') && (c <= '9'))
      first = first * 10 + c - '0', r = 1;
    else if (r)
      break;
  }
  if (n) first = -first;
  return (1);
}
bool ReadLL(long long &first) {
  char c, r = 0, n = 0;
  first = 0;
  for (;;) {
    c = getchar();
    if ((c < 0) && (!r)) return (0);
    if ((c == '-') && (!r))
      n = 1;
    else if ((c >= '0') && (c <= '9'))
      first = first * 10 + c - '0', r = 1;
    else if (r)
      break;
  }
  if (n) first = -first;
  return (1);
}
int V[200005];
long long A[200005];
int main() {
  if (0) freopen("in.txt", "r", stdin);
  int N, M, K;
  int i, j, k, z, a, b, p;
  Read(N);
  for (i = 0; i < N; i++) Read(V[i]);
  for (i = 0; i < N; i++)
    if (V[i] != V[0]) break;
  if (i == N) {
    if (V[0]) {
      printf("NO\n");
      return (0);
    }
    for (i = 0; i < N; i++) A[i] = 1;
    goto Done;
  }
  for (i = 0; i < N; i++)
    if (V[(i + N - 1) % N] < V[i]) {
      A[i] = V[i];
      j = i;
      for (;;) {
        p = j;
        j = (j + N - 1) % N;
        if (j == i) break;
        k = (j + N - 1) % N;
        long long mn = V[k] + 1;
        long long bs = V[j];
        long long mlt = A[p];
        if (bs < mn) {
          long long d = (mn - bs + mlt - 1) / mlt;
          bs += d * mlt;
        }
        A[j] = bs;
      }
      break;
    }
Done:;
  printf("YES\n");
  for (i = 0; i < N; i++) {
    if (i) printf(" ");
    cout << A[i];
  }
  printf("\n");
  return (0);
}
