// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



using VS = vector<string>;    using LL = long long;

using VI = vector<int>;       using VVI = vector<VI>;

using PII = pair<int, int>;   using PLL = pair<LL, LL>;

using VL = vector<LL>;        using VVL = vector<VL>;



#define ALL(a)  begin((a)),end((a))

#define RALL(a) (a).rbegin(), (a).rend()

#define PB push_back

#define EB emplace_back

#define MP make_pair

#define SZ(a) int((a).size())

#define SORT(c) sort(ALL((c)))

#define RSORT(c) sort(RALL((c)))

#define UNIQ(c) (c).erase(unique(ALL((c))), end((c)))

#define FOR(i, s, e) for (int(i) = (s); (i) < (e); (i)++)

#define FORR(i, s, e) for (int(i) = (s); (i) > (e); (i)--)

#define debug(x) cerr << #x << ": " << x << endl

const int INF = 1e9;                          const LL LINF = 1e16;

const LL MOD = 1000000007;                    const double PI = acos(-1.0);

int DX[8] = { 0, 0, 1, -1, 1, 1, -1, -1 };    int DY[8] = { 1, -1, 0, 0, 1, -1, 1, -1 };



/* -----  2018/02/23  Problem: 068_arc_b / Link: https://arc068.contest.atcoder.jp/tasks/arc068_b?lang=en  ----- */

/* ------問題------



すぬけくんはカードゲームで遊ぶことにしました。 N 枚からなるカードの山があり、上から i 枚目のカードには整数 Ai が書かれています。

すぬけくんはこのカードの山に対し 0 回以上、以下の操作を行い、残ったカードに書かれた値が互いに異なるようにしたいです。最大で何枚のカードを残すことが可能か求めなさい。なお、N は奇数であり、少なくとも 1 枚のカードを残すことが可能であることが保証されます。

操作：カードの山から任意の 3 枚のカードを抜き出す。抜き出したカードのうち書かれた値が最大であるようなカード 1 枚と最小であるようなカード 1 枚の合計 2 枚を選んで食べる。その後残った 1 枚をカードの山に戻す。



-----問題ここまで----- */

/* -----解説等-----



数字をまとめて個数で考える。

3個以上のものは同じものだけを選択することで全部1か2になる。

2についてこれらは全て選択し他の2あるいは1も選択する。

2が偶数個あるときは数自体を減らさずに個数のみを減らせる。

奇数個のときは最後の1つだけが相手が見つからず誰かを消すことになる。

これを書けば良い。



----解説ここまで---- */



LL N;



LL ans = 0LL;



int main() {

	cin.tie(0);

	ios_base::sync_with_stdio(false);



	cin >> N;

	VI a(N);

	VI cnt(100005);

	FOR(i, 0, N) {

		cin >> a[i];

		cnt[a[i]]++;

	}

	VI pq;

	FOR(i, 0, 100005) {

		if (cnt[i])pq.push_back(cnt[i]);



	}

	int even = 0;

	FOR(i, 0, SZ(pq)) {

		if (pq[i] % 2 == 0)even++;

	}

	ans = SZ(pq);

	if (even % 2 == 1)ans--;

	cout << ans << "\n";



	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.5189822530891817x):
    /**



    +++---------+++--------- Don't lose faith ---------+++---------+++



    +++---------+++--------- Author : sea_26 ----------+++---------+++



    **/



    #pragma GCC optimize("03")

    #include <bits/stdc++.h>



    using namespace std;



    using ll = long long;

    using ld = long double;



    priority_queue<int> pq;



    const int M = 1e9 + 7;

    const ll MOD = 998244353;

    const ld eps = 1e-9;

    const ld PI = acos(-1.0);



    // const double pi = atan2(0, -1);

    // const double PI = 4 * atan(1);

    // const double pi = 2*cos(0.0);



    const int iinf = 0x3f3f3f3f;

    const ll linf = 0x3f3f3f3f3f3f3f3f;



    #define mp make_pair

    #define eb emplace_back

    #define ep emplace

    #define f first

    #define s second

    #define sz size()



    #define bp(n)  __builtin_popcount(n)

    #define bclz(n) __builtin_clzll(n)

    #define bctz(n) __builtin_ctzll(n)

    #define bip(n) __builtin_parity(n)



    #define vsort(v) sort(v.begin(),v.end())

    #define rvsort(v) sort(v.begin(),v.end(),greater<int>())

    #define mnv(v) *min_element(v.begin(),v.end())

    #define mxv(v) *max_element(v.begin(),v.end())

    #define all(v) (v).begin(),(v).end()

    #define ita(v) iota(all(v), 0)



    #define ub upper_bound

    #define lb lower_bound

    #define cr(n) (floor)cbrt(n)

    #define msz(a) memset(a, 0, sizeof(a))

    #define msm(a) memset(a, 0xff, sizeof(a))



    #define rep(n) for(int i=0; i<n; i++)

    #define rrep(n) for(int i=n-1; i>=0; i--)

    #define lrep(p,q) for(int j=p; j<=q; j++)

    #define ldrep(p,q) for(int i=p; i>=q; i--)

    #define rsrep(n) for(int i=2; i*i<=n; i++)

    #define it(v)  for(auto p: v)

    #define yes cout << "YES" << endl

    #define no cout << "NO" << endl



    #define fs ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);



    template< typename T> inline T MAX(T a, T b){ return a ^ ((a ^ b) & -(a < b)); }

    template< typename T> inline T MIN(T a, T b){ return b ^ ((a ^ b) & -(a < b)); }

    template< typename T> void tpns(T n){ rrep(30){ if(n & (1 << i)) pq.push(1 << i); } }

    template< typename T> void SWAP(T &a, T &b){ a = ((a) ^= (b)),  b = ((b) ^= (a)),  a = ((a) ^= (b)); }

    template< typename T> inline T mod(T a, T b){ return a >= b ? a % b : a; }

    template< typename T> inline T gcd(T a, T b){ while (b) b ^= a ^= b ^= a %= b; return a; }

    ///template< typename T> inline T gcd(T a, T b) {while(b){int r = a % b; a = b; b = r;}return a; } /// T.C : log(a+b)

    template< typename T> inline T lcm(T a, T b){ return (a / gcd(a,b)) * b; }

    template< typename T> T sqr(T x){ return x * x; }

    template< typename T> T bigmod(T n,ll p, T M){ if(!p) return 1; else{ T r = sqr(bigmod(n,p >> 1, M))%M; if(p&1) r = (r*n)%M; return r; }}

    template< typename T> T exgcd(T a, T b, T& x, T& y){ if(!b){ x = 1; y = 0;return a;} else{T g = exgcd(b,a%b,y,x); y -= (a/b)*x; return g;}}

    template< typename T> T icbrt(T mul){T r = cbrt(mul) + 1; while(r * r * r > mul) r--; return r; } /// 54229668



    ///ll gcdextd(ll a, ll b, ll& x, ll& y) { if (!a) { x = 0; y = 1; return b; }  ll y1,d; d = gcdextd(b % a, a, y, y1);  x = y1 - (b / a) * y; return d; }

    ll takemod(ll a){return ((a % M) + M) % M; }

    ll fexpo(ll base, ll e){ ll res = 1; while(e > 0){ if(e & 1) res = (res * base) % M; base = (base * base ) % M; e >>= 1; } return 0; }

    ll modinv(ll a){return takemod(fexpo(takemod(a), M-2));}



    void ReT(){ cout << "\nTime = " << fixed << setprecision(3) << double(clock()) / CLOCKS_PER_SEC  << " Sec"<< endl; exit(0);}







    int main(){



        fs;



        int n, x, uq;

        map<int,int> card;



        cin >> n;



        rep(n){

            cin >> x;

            card[x]++;

        }



        uq=card.sz;

        

        if(uq & 1) cout << uq << endl;

        else cout << uq-1 << endl;



        /// ReT();



    return 0;

    }