#include <bits/stdc++.h>
using namespace std;
long long n;
long long b[200010];
long long a[200010];
int main() {
  cin >> n;
  pair<long long, long long> mx = {0, 0};
  for (long long i = 0; i < n; i++) {
    cin >> b[i];
    mx = max(mx, {b[i], i});
  }
  if (mx.first == 0) {
    cout << "YES" << endl;
    for (long long i = 0; i < n; i++) {
      cout << "1 ";
    }
    cout << endl;
    return 0;
  }
  pair<long long, long long> mx1 = {0, 0};
  for (long long i = 0; i < n; i++) {
    if (i == mx.second) continue;
    mx1 = max(mx1, {b[i], i});
  }
  if (mx1.first == 0) {
    cout << "YES" << endl;
    if (mx.second == n - 1) {
      cout << 2 * mx.first << " ";
      for (long long i = 1; i < n; i++) {
        cout << mx.first << " ";
      }
    } else {
      for (long long i = 0; i < n; i++) {
        if (i == mx.second + 1)
          cout << mx.first * 2 << " ";
        else
          cout << mx.first << " ";
      }
    }
    cout << endl;
    return 0;
  }
  if (mx1.first == mx.first) {
    long long ch = 0, z;
    for (long long i = 0; i < n; i++) {
      if (b[i] != 0 && b[i] != mx.first) {
        ch++;
        z = i;
        break;
      }
    }
    if (ch) {
      ch = 0;
      for (long long i = z; i < n; i++) {
        if (b[i] == mx.first) {
          a[i] = b[i];
          for (long long l = i - 1; l >= 0; l--) {
            a[l] = a[l + 1] + b[l];
          }
          if (i != n - 1) a[n - 1] = a[0] + b[n - 1];
          for (long long l = n - 2; l > i; l--) {
            a[l] = a[l + 1] + b[l];
          }
          ch = 1;
          break;
        }
      }
      if (!ch) {
        for (long long i = 0; i < z; i++) {
          if (b[i] == mx.first) {
            a[i] = b[i];
            for (long long l = i - 1; l >= 0; l--) {
              a[l] = a[l + 1] + b[l];
            }
            if (i != n - 1) a[n - 1] = a[0] + b[n - 1];
            for (long long l = n - 2; l > i; l--) {
              a[l] = a[l + 1] + b[l];
            }
            break;
          }
        }
      }
    } else {
      pair<long long, long long> mn = {b[0], 0};
      for (long long i = 0; i < n - 1; i++) {
        if (b[i] == 0 && b[i + 1] == mx.first) {
          mn.first = 0;
          mn.second = i;
          break;
        }
      }
      if (b[n - 1] == 0 && b[0] == mx.first) {
        mn.first = 0;
        mn.second = n - 1;
      }
      if (mn.first == mx.first) {
        cout << "NO" << endl;
        return 0;
      } else {
        a[mn.second] = 2 * mx.first;
        if (mn.second != n - 1) {
          a[mn.second + 1] = mx.first;
          for (long long i = mn.second - 1; i >= 0; i--) {
            a[i] = a[i + 1] + b[i];
          }
          if (mn.second + 1 != n - 1) {
            a[n - 1] = a[0] + b[n - 1];
          }
          for (long long i = n - 2; i > mn.second + 1; i--) {
            a[i] = a[i + 1] + b[i];
          }
        } else {
          a[0] = mx.first;
          for (long long i = n - 2; i > 0; i--) {
            a[i] = a[i + 1] + b[i];
          }
        }
      }
    }
  } else {
    a[mx.second] = mx.first;
    for (long long i = mx.second - 1; i >= 0; i--) {
      a[i] = a[i + 1] + b[i];
    }
    if (mx.second != n - 1) a[n - 1] = a[0] + b[n - 1];
    for (long long i = n - 2; i > mx.second; i--) {
      a[i] = a[i + 1] + b[i];
    }
  }
  cout << "YES" << endl;
  for (long long i = 0; i < n; i++) cout << a[i] << " ";
  cout << endl;
  return 0;
}
