#include <bits/stdc++.h>
using namespace std;
long long maxx = -1, wei, n, a[140600], ans[140600], pos[140600];
int main() {
  scanf("%lld", &n);
  for (register int i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    if (a[i] >= maxx) {
      maxx = a[i];
      wei = i;
    }
  }
  bool flag = 0;
  for (register int i = 2; i <= n; i++) {
    if (a[i] != a[i - 1]) {
      flag = 1;
      break;
    }
  }
  if (a[1] != a[n]) flag = 1;
  if (flag == 0) {
    if (a[1] == 0) {
      printf("YES\n");
      for (register int i = 1; i <= n; i++) {
        printf("1 ");
      }
      return 0;
    }
    printf("NO\n");
    return 0;
  }
  int tot = 0;
  for (register int i = 1; i <= n; i++) {
    if (a[i] == maxx) {
      pos[++tot] = i;
    }
  }
  for (register int i = 1; i <= tot; i++) {
    if (pos[i] == 1) {
      if (a[1] != a[n]) {
        wei = 1;
        break;
      }
    } else {
      if (a[pos[i]] != a[pos[i] - 1]) {
        wei = pos[i];
        break;
      }
    }
  }
  ans[wei] = a[wei];
  for (register int i = wei - 1; i != wei; i--) {
    if (i == 0) i = n;
    if (i == wei) break;
    if (i == n) {
      ans[i] = ((a[i - 1] - a[i]) / ans[1] + 1) * ans[1] + a[i];
    } else {
      if (i == 1) {
        ans[i] = ((a[n] - a[i]) / ans[2] + 1) * ans[2] + a[i];
      } else {
        ans[i] = ((a[i - 1] - a[i]) / ans[i + 1] + 1) * ans[i + 1] + a[i];
      }
    }
  }
  printf("YES\n");
  for (register int i = 1; i <= n; i++) {
    printf("%lld ", ans[i]);
  }
  return 0;
}
