#include <bits/stdc++.h>
using ll = long long;
using namespace std;
vector<ll> solve1(int n, vector<int> const& b) {
  assert(b[n - 2] < b[n - 1]);
  vector<ll> a(n);
  a[n - 1] = b[n - 1];
  a[n - 2] = b[n - 2];
  if (a[n - 2] == 0) a[n - 2] += a[n - 1];
  for (int i = int(n - 2) - 1; (i) >= 0; --(i)) {
    a[i] = b[i];
    if (a[i] == 0) a[i] += a[i + 1];
    while (b[i] >= a[i + 1]) {
      a[i + 1] += a[i + 2];
    }
  }
  while (b[n - 1] >= a[0]) {
    a[0] += a[1];
  }
  return a;
}
vector<ll> solve(int n, vector<int> b) {
  if (count(begin(b), end(b), 0) == n) return vector<ll>(n, 1);
  if (count(begin(b), end(b), b[0]) == n) return vector<ll>();
  int i = min_element(begin(b), end(b)) - b.begin();
  while (b[i] == b[(i + 1) % n]) i = (i + 1) % n;
  assert(b[i] < b[(i + 1) % n]);
  rotate(b.begin(), b.begin() + ((i + 2) % n), b.end());
  vector<ll> a = solve1(n, b);
  assert(not a.empty());
  rotate(a.begin(), a.begin() + ((n - i - 2 + n) % n), a.end());
  return a;
}
int main() {
  int n;
  cin >> n;
  vector<int> b(n);
  for (int i = 0; (i) < (int)(n); ++(i)) cin >> b[i];
  vector<ll> a = solve(n, b);
  if (a.empty()) {
    cout << "NO" << endl;
  } else {
    cout << "YES" << endl;
    for (int i = 0; (i) < (int)(n); ++(i)) cout << a[i] << ' ';
    cout << endl;
    for (int i = 0; (i) < (int)(n); ++(i))
      assert(b[i] == a[i] % a[(i + 1) % n]);
  }
  return 0;
}
