static int f(int cant, int usados, int ant) {
		if(cant>M)
			return 0;
		if(mem[cant][usados][ant]>-1)
			return mem[cant][usados][ant];
		int result=0;
		if(usados==(1<<N)-1)
			result++;
		for(int i=0;i<N;i++)
			if((cant==0&&i!=0)||(cant>0&&abs(ant-i)==1))
				result=(result+f(cant+1,usados|(1<<i),i)%1000000007)%1000000007;
		return mem[cant][usados][ant]=result;
	}