#include <bits/stdc++.h>
using namespace std;
const int INF = 1000 * 1000 * 1000 + 7;
const int MOD = 1000 * 1000 * 1000 + 7;
const int MX = 150 * 1000 + 7;
using ll = long long;
const ll MUL = 2e6;
ll a[MX];
ll b[MX];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  for (int i = 1; i <= 100; i++) {
    for (int j = 1; j <= 100; j++) {
      for (int k = 1; k <= 100; k++) {
        if (i % j == j % k && j % k == k % i && i % j != 0) {
          cout << i << " " << j << " " << k << endl;
          return 0;
        }
      }
    }
  }
  int n;
  cin >> n;
  bool zero = true;
  for (int i = 0; i < n; i++) {
    cin >> b[i];
    if (b[i] != 0) {
      zero = false;
    }
  }
  if (zero) {
    cout << "YES\n";
    for (int i = 0; i < n; i++) {
      cout << 1 << " ";
    }
    cout << "\n";
    return 0;
  }
  int ptr = -1;
  for (int i = 0; i < n; i++) {
    if (b[i] < b[(i + 1) % n]) {
      ptr = (i + 1) % n;
    }
  }
  if (ptr == -1) {
    cout << "NO\n";
    return 0;
  }
  a[ptr] = b[ptr];
  int cur = (ptr + n - 1) % n;
  while (cur != ptr) {
    int nx = (cur + 1) % n;
    if (b[cur] < a[nx]) {
      a[cur] = b[cur];
    } else {
      ll more = (b[cur] - a[nx] + 1);
      int nnx = (nx + 1) % n;
      ll toadd = (more + a[nnx] - 1) / a[nnx];
      a[nx] += toadd * a[nnx];
      assert(nx != ptr);
      a[cur] = b[cur];
    }
    if (a[cur] < MUL) {
      int more = MUL - a[cur];
      int dv = (more + a[nx] - 1) / a[nx];
      a[cur] += a[(cur + 1) % n] * dv;
    }
    cur = (cur + n - 1) % n;
  }
  cout << "YES\n";
  for (int i = 0; i < n; i++) {
    cout << a[i] << " ";
  }
  for (int i = 0; i < n; i++) {
    assert(a[i] % (a[(i + 1) % n]) == b[i]);
  }
  cout << "\n";
  return 0;
}
