// no of ways to divide the given array into 4 equal parts
import java.util.* ;
public class Main
{
public static void main
( String [ ] args
) { Scanner sc
= new Scanner
( System .
in ) ; int n= sc.nextInt ( ) ;
int [ ] nums = new int [ n] ;
for ( int i= 0 ; i< n; i++ ) {
nums[ i] = sc.nextInt ( ) ;
}
int tot_sum= 0 ;
for ( int i= 0 ; i< n; i++ ) {
tot_sum+= nums[ i] ;
}
int lhs= 0 ;
int rhs= 0 ;
int count= 0 ;
int count2= 0 ;
int count_ans= 0 ;
if ( tot_sum% 4 == 0 ) {
int y= tot_sum/ 4 ;
//I need current sum
int current_sum= 0 ;
HashMap
< Integer ,Integer
> f
= new HashMap
<> ( ) ; HashMap
< Integer ,Integer
> g
= new HashMap
<> ( ) ;
int current_sumg= 0 ;
for ( int j= n- 1 ; j>= 0 ; j-- ) {
current_sumg+= nums[ j] ;
g.put ( current_sumg,g.getOrDefault ( current_sumg,0 ) + 1 ) ;
}
for ( int j= 0 ; j< n- 1 ; j++ ) {
lhs+= nums[ j] ;
rhs= tot_sum- lhs;
current_sum+= nums[ j] ;
g.put ( current_sumg,g.get ( current_sumg) - 1 ) ;
if ( g.get ( current_sumg) == 0 ) {
g.remove ( current_sumg) ;
}
current_sumg-= nums[ j] ;
if ( lhs == 2 * y && rhs == 2 * y ) {
count= count + f.getOrDefault ( current_sum/ 2 ,0 ) ;
count2= count2 + g.getOrDefault ( current_sumg/ 2 ,0 ) ;
count_ans += count* count2;
}
f.put ( current_sum,f.getOrDefault ( current_sum,0 ) + 1 ) ;
}
}
System .
out .
print ( "Number of ways to divide in four equal parts :" + count_ans
) ; }
}
Ly8gbm8gb2Ygd2F5cyB0byBkaXZpZGUgdGhlIGdpdmVuIGFycmF5IGludG8gNCBlcXVhbCBwYXJ0cwppbXBvcnQgamF2YS51dGlsLio7CnB1YmxpYyBjbGFzcyBNYWluCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQlTY2FubmVyIHNjID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKCQlpbnQgbj1zYy5uZXh0SW50KCk7CgkJaW50W11udW1zID0gbmV3IGludFtuXTsKCQkKCQlmb3IoaW50IGk9IDA7aTxuO2krKyl7CgkJICAgIG51bXNbaV09c2MubmV4dEludCgpOwoJCX0KCQlpbnQgdG90X3N1bT0wOwoJCWZvcihpbnQgaT0wO2k8bjtpKyspewoJCSAgICB0b3Rfc3VtKz1udW1zW2ldOwoJCX0KCQlpbnQgbGhzPTA7CgkJaW50IHJocz0wOwoJCWludCBjb3VudD0wOwoJCWludCBjb3VudDI9MDsKCQlpbnQgY291bnRfYW5zPTA7CgkJaWYodG90X3N1bSU0ID09MCl7CgkJICAgIGludCB5PXRvdF9zdW0vNDsKCQkgICAgCgkJICAgIC8vSSBuZWVkIGN1cnJlbnQgc3VtIAoJCSAgICBpbnQgY3VycmVudF9zdW09MDsKCQkgICAgCgkJICAgIEhhc2hNYXA8SW50ZWdlcixJbnRlZ2VyPmYgPSBuZXcgSGFzaE1hcDw+KCk7CgkJICAgIEhhc2hNYXA8SW50ZWdlcixJbnRlZ2VyPmcgPSBuZXcgSGFzaE1hcDw+KCk7CgkJICAgIAoJCSAgICBpbnQgY3VycmVudF9zdW1nPTA7CgkJICAgIAoJCSAgICBmb3IoaW50IGo9bi0xO2o+PTA7ai0tKXsKCQkgICAgICAgIGN1cnJlbnRfc3VtZys9bnVtc1tqXTsKCQkgICAgICAgIGcucHV0KGN1cnJlbnRfc3VtZyxnLmdldE9yRGVmYXVsdChjdXJyZW50X3N1bWcsMCkrMSk7CgkJICAgIH0KCQkgICAgCgkJICAgIGZvcihpbnQgaj0wO2o8bi0xO2orKyl7CgkJICAgICAgICBsaHMrPW51bXNbal07CgkJICAgICAgICByaHM9dG90X3N1bS1saHM7CgkJICAgICAgICBjdXJyZW50X3N1bSs9bnVtc1tqXTsKCQkgICAgICAgIAoJCSAgICAgICAgZy5wdXQoY3VycmVudF9zdW1nLGcuZ2V0KGN1cnJlbnRfc3VtZyktMSk7CgkJICAgICAgICBpZihnLmdldChjdXJyZW50X3N1bWcpPT0wKXsKCQkgICAgICAgICAgZy5yZW1vdmUoY3VycmVudF9zdW1nKTsgICAKCQkgICAgICAgIH0KCQkgICAgICAgIAoJCSAgICAgICAgY3VycmVudF9zdW1nLT1udW1zW2pdOwoJCSAgICAgICAgCgkJICAgICAgICBpZihsaHMgPT0gMip5ICYmIHJocyA9PTIqeSApewoJCSAgICAgICAgICBjb3VudD1jb3VudCArIGYuZ2V0T3JEZWZhdWx0KGN1cnJlbnRfc3VtLzIsMCkgOwoJCSAgICAgICAgICBjb3VudDI9Y291bnQyICtnLmdldE9yRGVmYXVsdChjdXJyZW50X3N1bWcvMiwwKTsKCQkgICAgICAgICAgY291bnRfYW5zICs9Y291bnQqY291bnQyOwoJCSAgICAgICAgfQoJCSAgICAgICAgZi5wdXQoY3VycmVudF9zdW0sZi5nZXRPckRlZmF1bHQoY3VycmVudF9zdW0sMCkrMSk7CgkJICAgIH0KCQl9CgkJU3lzdGVtLm91dC5wcmludCgiTnVtYmVyIG9mIHdheXMgdG8gZGl2aWRlIGluIGZvdXIgZXF1YWwgcGFydHMgOiIgKyBjb3VudF9hbnMpOwoJfQp9