Problem: A robot is standing at the origin of the infinite two-dimensional plane. Each second the robot moves exactly 1 meter in one of the four cardinal directions: north, south, west, and east. For the first step the robot can choose any of the four directions, but then at the end of every second it has to turn 90 degrees left or right with respect to the direction it just moved in. For example, if the robot has just moved north or south, the next step it takes has to be either west or east, and vice versa.

The robot makes exactly n steps from its starting position according to the rules above. How many different points can the robot arrive to at the end? The final orientation of the robot can be ignored.

Input

The only line contains a single integer n (1 ≤ n ≤ 1000) — the number of steps the robot makes.

Output

Print a single integer — the number of different possible locations after exactly n steps.

Examples

Input


1


Output


4


Input


2


Output


4


Input


3


Output


12

Note

In the first sample case, the robot will end up 1 meter north, south, west, or east depending on its initial direction.

In the second sample case, the robot will always end up √{2} meters north-west, north-east, south-west, or south-east.

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.*;
public class d2691 implements Runnable 
{
	class pair
	{
		int x;int y;int d;
		pair(int x,int y,int d)
		{
			this.x=x; this.y=y; this.d=d;
		}

	}
	private boolean console=false;

	int x[]= {1,0}; int y[]= {0,1};
	public void solve()
	{
		int i; int n=in.ni(); long ans[]=new long[1001]; ans[1]=4; ans[2]=4; int ptr=3; long add=8;
		for(i=3;i<=n;i++)
		{
			if(i%2!=0) 
			{
				ans[i]=ans[i-2]+add; add+=4; 
			}
			else
			{
				ans[i]=ptr*ptr; ptr++;
			}
		}
		out.println(ans[n]);
		/*
		Queue<pair> q=new LinkedList(); 
		q.add(new pair(0,1,0));
		q.add(new pair(1,0,1));
		q.add(new pair(0,-1,0));
		q.add(new pair(-1,0,1)); 
		n--; int cnt=0;
		while(n>0)
		{
			int size=q.size();
			for(i=0;i<size;i++)
			{
				pair c=q.poll();
				if(c.d==1)
				{
					int x=c.x, y=c.y;
					pair add=new pair(x,y+1,0);  pair add1=new pair(x,y-1,0);
					q.add(add); q.add(add1);
				}
				else
				{
					int x=c.x, y=c.y;
					pair add=new pair(x+1,y,1);  pair add1=new pair(x-1,y,1);
					q.add(add); q.add(add1);
				}
			}
			n--;
		}
		int un[][]=new int[1000][1000]; 
		while(q.size()>0)
		{
			pair c=q.poll();
			if(un[c.x+500][c.y+500]==0)
			{
				cnt++; un[c.x+500][c.y+500]=1;
			}
		}
		
		System.out.println(cnt);

*/
	}
	@Override
	public void run() {
		try {  init();  }  
		catch (FileNotFoundException e) {  e.printStackTrace();  }

		int t= 1;

		while (t-->0) {
			solve();
			out.flush(); }
	}
	private FastInput in;    private PrintWriter out;
	public static void main(String[] args) throws Exception {	 new d2691().run();	 }

	private void init() throws FileNotFoundException {
		InputStream inputStream = System.in; 	 OutputStream outputStream = System.out;
		try {  if (!console && System.getProperty("user.name").equals("sachan")) {
			outputStream = new FileOutputStream("/home/sachan/Desktop/output.txt");
			inputStream = new FileInputStream("/home/sachan/Desktop/input.txt");   	}
		}	catch (Exception ignored) {	}
		out = new PrintWriter(outputStream); 	 in = new FastInput(inputStream);
	}
	static class FastInput { InputStream obj;
	public FastInput(InputStream obj) {	this.obj = obj;	}
	byte inbuffer[] = new byte[1024];  int lenbuffer = 0, ptrbuffer = 0;
	int readByte() { if (lenbuffer == -1) throw new InputMismatchException();
	if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
	try { lenbuffer = obj.read(inbuffer);  }
	catch (IOException e) { throw new InputMismatchException(); } }    
	if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; }

	String ns() { int b = skip();StringBuilder sb = new StringBuilder();
	while (!(isSpaceChar(b)))	  { sb.appendCodePoint(b);b = readByte(); }return sb.toString();}

	int ni() { int num = 0, b;boolean minus = false;
	while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
	if (b == '-') { minus = true;b = readByte(); }
	while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
		return minus ? -num : num; }b = readByte(); }}

	long nl() { long num = 0;int b;boolean minus = false;
	while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
	if (b == '-') { minus = true;b = readByte(); }
	while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
		return minus ? -num : num; }b = readByte(); } }

	boolean isSpaceChar(int c) { return (!(c >= 33 && c <= 126)); }
	int skip() { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; }
	float nf() {return Float.parseFloat(ns());}
	double nd() {return Double.parseDouble(ns());}
	char nc() {return (char) skip();}
	}
}