You are given a regular polygon with n vertices labeled from 1 to n in counter-clockwise order. The triangulation of a given polygon is a set of triangles such that each vertex of each triangle is a vertex of the initial polygon, there is no pair of triangles such that their intersection has non-zero area, and the total area of all triangles is equal to the area of the given polygon. The weight of a triangulation is the sum of weigths of triangles it consists of, where the weight of a triagle is denoted as the product of labels of its vertices.

Calculate the minimum weight among all triangulations of the polygon.

Input

The first line contains single integer n (3 ≤ n ≤ 500) — the number of vertices in the regular polygon.

Output

Print one integer — the minimum weight among all triangulations of the given polygon.

Examples

Input


3


Output


6


Input


4


Output


18

Note

According to Wiki: polygon triangulation is the decomposition of a polygonal area (simple polygon) P into a set of triangles, i. e., finding a set of triangles with pairwise non-intersecting interiors whose union is P.

In the first example the polygon is a triangle, so we don't need to cut it further, so the answer is 1 ⋅ 2 ⋅ 3 = 6.

In the second example the polygon is a rectangle, so it should be divided into two triangles. It's optimal to cut it using diagonal 1-3 so answer is 1 ⋅ 2 ⋅ 3 + 1 ⋅ 3 ⋅ 4 = 6 + 12 = 18.
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Set;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.TreeSet;

public class q5 {
	static long aa,bb;
	static long score1,score2,steps;
	static HashSet<NoD> vis;
	long gcd(long a,long b) {
		if(b==0) return a;
		else return gcd(b,a%b);
	}
	
	
	
	
	public static void main(String[] args) throws IOException {
		
		Reader.init(System.in);
		StringBuffer output=new StringBuffer("");
		PrintWriter out=new PrintWriter(System.out);
//		int n=Reader.nextInt();
//		int k=Reader.nextInt();
//		ArrayList<NoD> arr=new ArrayList<NoD>();
//		for(int i=0;i<n;i++) {
//			arr.add(new NoD(Reader.nextInt(),Reader.nextInt(),0));
//		}
//		Collections.sort(arr,new Comparator<NoD>() {
//			public int compare(NoD a,NoD b) {
//				return a.b-b.b;
//			}
//		});
//		
		int n=Reader.nextInt();
		long ans=Long.MAX_VALUE;
		long prod=0;
		for(int i=2;i<n;i++) {
			prod+=i*i+i;
		}
		ans=Math.min(ans, prod);
		output.append(prod);
		out.write(output.toString());
		out.flush();
		
	}
}

class NoD{
	int a,b,c;
	NoD(int aa,int bb,int cc){
		a=aa;b=bb;c=cc;
	}
	@Override
	public boolean equals(Object o) {
		if(o!=null && o.getClass()==this.getClass() ) {
			NoD c=(NoD) o;
			return a==c.a && b==c.b;
		}
		return false;
	}
	@Override
	public int hashCode() {
		String s=Integer.toString(a);
		s+=" "+b+" "+c;
		return s.hashCode();
	}
}

class Dis {
	int[] arr;
	int[] parent;
	int[] rank;
	int[] size;
	Dis(int n){
		arr=new int[n+1];
		parent=new int[n+1];
		rank=new int[n+1];
		size=new int[n+1];
		for(int i=1;i<=n;i++) {
			arr[i]=i;
			parent[i]=i;
			rank[i]=0;
			size[i]=1;
		}
	}

	int find(int value) {
		int par=parent[value];
		if(par==value)
			return par;
		parent[value]=find(par);
		return parent[value];
	}
	
	void union(int data1,int data2) {
		int parent1=find(data1);
		int parent2=find(data2);
		if(parent1!=parent2) {
			if(rank[parent1]>=rank[parent2]) {
				parent[parent2]=parent1;
				if(rank[parent1]==rank[parent2])
					rank[parent1]++;
				size[parent1]+=size[parent2];
			}
			else {
				parent[parent1]=parent2;
				size[parent2]+=size[parent1];
			}
		}
		
	}


}
class Reader {
    static BufferedReader reader;
    static StringTokenizer tokenizer;
 
    /** call this method to initialize reader for InputStream */
    static void init(InputStream input) {
        reader = new BufferedReader(
                     new InputStreamReader(input) );
        tokenizer = new StringTokenizer("");
    }
 
    /** get next word */
    static String nextLine() throws IOException{
    	return reader.readLine();
    }
    static String next() throws IOException {
        while ( ! tokenizer.hasMoreTokens() ) {
            //TODO add check for eof if necessary
            tokenizer = new StringTokenizer(
                   reader.readLine() );
        }
        return tokenizer.nextToken();
    }
    
    static int nextInt() throws IOException {
        return Integer.parseInt( next() );
    }
    static long nextLong() throws IOException {
        return Long.parseLong( next() );
    }
    static double nextDouble() throws IOException {
        return Double.parseDouble( next() );
    }
}




 
 

 