#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  char zf = 1;
  char ch = getchar();
  while (ch != '-' && !isdigit(ch)) ch = getchar();
  if (ch == '-') zf = -1, ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return x * zf;
}
void write(long long y) {
  if (y < 0) putchar('-'), y = -y;
  if (y > 9) write(y / 10);
  putchar(y % 10 + 48);
}
void writeln(const long long y) {
  write(y);
  putchar('\n');
}
int i, j, k, m, n, x, y, z, cnt;
long long a[200010], b[200010];
int main() {
  n = read();
  for (register int i = 1; i <= n; i++) a[i] = read();
  a[0] = a[n], a[n + 1] = a[1];
  int pla = n + 3;
  for (register int i = 1; i <= n; i++)
    if (a[i] > a[pla] && a[i] != a[(i + n - 2) % n + 1]) pla = i;
  if ((*max_element(a + 1, a + n + 1)) == 0) {
    puts("YES");
    for (register int i = 1; i <= n; i++) cout << 1 << ' ';
    return 0;
  }
  if (pla > n) {
    puts("NO");
    return 0;
  }
  if (a[pla] == 0 && pla) {
    puts("YES");
    for (register int i = 1; i <= n; i++) cout << 1 << ' ';
    return 0;
  }
  b[pla] = a[pla];
  a[n + 1] = a[1];
  for (register int x = (pla + n - 2) % n + 1; x != pla;
       x = (x + n - 2) % n + 1) {
    b[0] = b[n];
    b[n + 1] = b[1];
    b[x] = a[x] + b[x + 1];
    if (!a[x] && b[x] <= a[pla]) b[x] += b[x + 1];
  }
  b[n + 1] = b[1];
  for (register int i = 1; i <= n; i++)
    if (b[i] % b[i + 1] != a[i]) {
      puts("NO");
      return 0;
    }
  puts("YES");
  for (register int i = 1; i <= n; i++) cout << b[i] << ' ';
  return 0;
}
