#include <bits/stdc++.h>
using namespace std;
long long int res[500005];
void solve() {
  long long int n, f = 0, hi = 0;
  cin >> n;
  vector<pair<long long int, long long int> > v(n);
  for (long long int i = 0; i < n; i++) {
    cin >> v[i].first;
    hi = max(hi, v[i].first);
    v[i].second = i;
  }
  for (long long int i = 0; i < n - 1; i++)
    if (v[i].first != v[i + 1].first) {
      f = 1;
      break;
    }
  if (!f) {
    if (v[0].first == 0) {
      cout << "YES\n";
      for (long long int i = 0; i < n; i++) cout << 1 << " ";
    } else
      cout << "NO";
    exit(0);
  }
  for (long long int i = 1; i < n; i++)
    if (v[i].first == hi && v[i - 1].first != hi) {
      vector<pair<long long int, long long int> > g(n);
      for (long long int j = i + 1; j < n; j++) g[j - i - 1] = v[j];
      for (long long int j = i; j >= 0; j--) g[n - i + j - 1] = v[j];
      v = g;
      f = 0;
      break;
    }
  if (f) {
    pair<long long int, long long int> a = v[0];
    for (long long int i = 1; i < n; i++) v[i - 1] = v[i];
    v[n - 1] = a;
  }
  res[v[n - 1].second] = v[n - 1].first;
  long long int i = n - 2;
  if (!v[n - 2].first) {
    res[v[n - 2].second] = 2 * v[n - 1].first;
    i--;
  }
  while (i >= 0) {
    res[v[i].second] = v[i].first + res[v[i + 1].second];
    i--;
  }
  cout << "YES\n";
  for (long long int i = 0; i < n; i++) cout << res[i] << " ";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int qc = 1;
  for (long long int i = 1; i <= qc; i++) solve();
}
