#include <bits/stdc++.h>
using namespace std;
int ara[300000];
long long ans[300000], tot[300000];
int main() {
  int i, j, k, l, m, n, ck = 0, dk = 0;
  set<int> s;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &ara[i]);
    if (ara[i] != 1) ck = 1;
    if (ara[i] != 0) dk = 1;
    s.insert(ara[i]);
  }
  if (ck == 0) {
    printf("NO");
    return 0;
  } else if (dk == 0) {
    printf("YES\n");
    for (int i = 1; i <= n; i++) {
      printf("1 ");
    }
    return 0;
  } else if (s.size() == 1) {
    printf("NO");
    return 0;
  }
  printf("YES\n");
  vector<int> vc, pos;
  pair<int, int> mc = make_pair(-1, 0);
  for (i = 1; i <= n; i++) {
    if (i == 1 && ara[n] == ara[1])
      continue;
    else if (i > 1 && ara[i] == ara[i - 1])
      continue;
    mc = max(make_pair(ara[i], i), mc);
  }
  vc.push_back(0);
  pos.push_back(0);
  for (int j = mc.second + 1; j <= n; j++) {
    vc.push_back(ara[j]);
    pos.push_back(j);
  }
  for (int i = 1; i <= mc.second; i++) {
    vc.push_back(ara[i]);
    pos.push_back(i);
  }
  ans[n] = vc[n];
  tot[pos[n]] = ans[n];
  int my = 0;
  for (int i = n - 1; i >= 1; i--) {
    if (vc[i] == 0 && my == 0) {
      my = 1;
      ans[i] = ans[i + 1] * 2;
    } else
      ans[i] = ans[i + 1] + vc[i];
    tot[pos[i]] = ans[i];
  }
  for (int i = 1; i <= n; i++) cout << tot[i] << " ";
}
