<p>You are given an integer array&nbsp;<code>nums</code>. You can choose <strong>exactly one</strong> index (<strong>0-indexed</strong>) and remove the element. Notice that the index of the elements may change after the removal.</p>

<p>For example, if <code>nums = [6,1,7,4,1]</code>:</p>

<ul>
	<li>Choosing to remove index <code>1</code> results in <code>nums = [6,7,4,1]</code>.</li>
	<li>Choosing to remove index <code>2</code> results in <code>nums = [6,1,4,1]</code>.</li>
	<li>Choosing to remove index <code>4</code> results in <code>nums = [6,1,7,4]</code>.</li>
</ul>

<p>An array is <strong>fair</strong> if the sum of the odd-indexed values equals the sum of the even-indexed values.</p>

<p>Return the <em><strong>number</strong> of indices that you could choose such that after the removal, </em><code>nums</code><em> </em><em>is <strong>fair</strong>. </em></p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [2,1,6,4]
<strong>Output:</strong> 1
<strong>Explanation:</strong>
Remove index 0: [1,6,4] -&gt; Even sum: 1 + 4 = 5. Odd sum: 6. Not fair.
Remove index 1: [2,6,4] -&gt; Even sum: 2 + 4 = 6. Odd sum: 6. Fair.
Remove index 2: [2,1,4] -&gt; Even sum: 2 + 4 = 6. Odd sum: 1. Not fair.
Remove index 3: [2,1,6] -&gt; Even sum: 2 + 6 = 8. Odd sum: 1. Not fair.
There is 1 index that you can remove to make nums fair.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [1,1,1]
<strong>Output:</strong> 3
<strong>Explanation:</strong>&nbsp;You can remove any index and the remaining array is fair.
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> nums = [1,2,3]
<strong>Output:</strong> 0
<strong>Explanation:</strong>&nbsp;You cannot make a fair array after removing any index.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= nums[i] &lt;= 10<sup>4</sup></code></li>
</ul>

#define ll long long
class Solution {
public:
    int waysToMakeFair(vector<int>& nums) {
        ll n = nums.size();
        if(n==1) return 1;
        vector<ll>pref_odd(n), pref_even(n);
        pref_even[0] = nums[0];
        for(ll i=1; i<n; ++i){
            if(i%2){
                pref_odd[i] = pref_odd[i-1] + nums[i];
                pref_even[i] = pref_even[i-1];
            }
            else{
                pref_even[i] = pref_even[i-1] + nums[i];
                pref_odd[i] = pref_odd[i-1];
            }
        }
        
        vector<ll>suff_odd(n), suff_even(n);
        
        if(n%2) suff_even[n-1] = nums[n-1];
        else suff_odd[n-1] = nums[n-1];
        for(ll i=n-2; i>=0; --i){
            if(i%2){
                suff_odd[i] = suff_odd[i+1] + nums[i];
                suff_even[i] = suff_even[i+1];
            }
            else{
                suff_even[i] = suff_even[i+1] +  nums[i];
                suff_odd[i] = suff_odd[i+1];
            }
        }
//         cout<<"pref_even : "<<" ";
//         for(auto &i: pref_even) cout<<i<<" ";
//         cout<<endl;
//         cout<<"pref_odd : "<<" ";
//         for(auto &i: pref_odd) cout<<i<<" ";
//         cout<<endl;
        
//         cout<<"suff_even : "<<" ";
//         for(auto &i: suff_even) cout<<i<<" ";
//         cout<<endl;
//         cout<<"suff_odd : "<<" ";
//         for(auto &i: suff_odd) cout<<i<<" ";
//         cout<<endl;
        
        ll ans = 0;
        if(abs(suff_odd[1] - suff_even[1]) == 0) ans++;
        
        // cout<<ans<<endl;
        for(ll i=1; i<n-1; ++i){
            // cout<<pref_odd[i-1] <<" "<<suff_even[i+1]; cout<<endl;
            // cout<<pref_even[i-1] <<" "<<suff_odd[i+1];
            ll final_odd = pref_odd[i-1] + suff_even[i+1];
            ll final_even = pref_even[i-1] + suff_odd[i+1];
            if(abs(final_odd - final_even) == 0) ++ans;
        }
        
        if(n>1){
            if(abs(pref_even[n-2] - pref_odd[n-2])==0) ++ans;
        }
        return ans;
    }
};
131000