#include <bits/stdc++.h>   #pragma comment(linker,  /stack:200000000 )   #pragma GCC optimize( Ofast )   #pragma GCC optimize( unroll-loops )   #pragma GCC target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native )   using namespace std;   const long long inf = numeric_limits<long long>::max() / 2;   const long double eps = 1e-9;   const long double pi = acos(-1);   template <typename T>   inline bool mineq(T& a, T b) {     return (a > b) ? (a = b, 1) : 0;   }   template <typename T>   inline bool maxeq(T& a, T b) {     return (a < b) ? (a = b, 1) : 0;   }   inline void solve(), read();   const string file =   ;   int main() {     if (file !=   ) {       freopen((file +  .in ).c_str(),  r , stdin);       freopen((file +  .out ).c_str(),  w , stdout);     }     ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);     ;     read();     solve();     return 0;   }   long long n;   vector<long long> a;   vector<pair<long long, long long> > b;   inline void solve() {     for (long long i = 0; i < n; i++) {       if (i && a[i] == a[i - 1]) {         ++b.back().second;       } else if (i == 0 || a[i] == a[i - 1] + 1) {         b.push_back({a[i], 1});       } else {         cout <<  NO               <<   n ;         return;       }     }     for (long long i = 0; i < (long long)((b).size()) - 2; i++) {       b[i + 1].second -= b[i].second;       if (b[i + 1].second <= 0) {         cout <<  NO               <<   n ;         return;       }     }     if (b[(long long)((b).size()) - 1].second !=         b[(long long)((b).size()) - 2].second) {       cout <<  NO             <<   n ;       return;     }     cout <<  YES           <<   n ;   }   inline void read() {     cin >> n;     a.resize(n);     for (long long i = 0; i < n; i++) {       cin >> a[i];     }     sort((a).begin(), (a).end());   }   