We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may be rotated.


XX  <- domino

XX  <- "L" tromino
X


Given N, how many ways are there to tile a 2 x N board? Return your answer modulo 10^9 + 7.

(In a tiling, every square must be covered by a tile. Two tilings are different if and only if there are two 4-directionally adjacent cells on the board such that exactly one of the tilings has both squares occupied by a tile.)



Example:
Input: 3
Output: 5
Explanation: 
The five different ways are listed below, different letters indicates different tiles:
XYZ XXZ XYY XXY XYY
XYZ YYZ XZZ XYY XXY

Note:


       N  will be in range [1, 1000].

Source: leetcode | Difficulty: MEDIUM_HARD
Tags: Dynamic programming

Starter code: class Solution:
    def numTilings(self, N: int) -> int:
        

Solutions:
class Solution:

	def isIdealPermutation(self, A):
		for i in range(len(A)):
			if abs(A[i] - i) > 1:
				return False
		return True


class Solution:

	def isIdealPermutation(self, A):
		l = []
		[1, 0, 3, 2]
		if len(A) == 1:
			return True
		for i in range(len(A)):
			if abs(A[i] - i) > 1:
				return False
		return True


class Solution:

	def isIdealPermutation(self, A):
		max_value = A[0]
		for i in range(1, len(A) - 1):
			if A[i + 1] < max_value:
				return False
			if A[i] > max_value:
				max_value = A[i]
		else:
			return True


class Solution:

	def isIdealPermutation(self, A):
		return all((abs(v - i) <= 1 for (i, v) in enumerate(A)))


class Solution:

	def isIdealPermutation(self, A):
		i = 0
		while i < len(A) - 1:
			if A[i] == i:
				i += 1
			elif A[i] == i + 1 and A[i + 1] == i:
				i += 2
			else:
				return False
		return True