Coating Every Pancake You have a stack of pancakes on a plate with a glob of syrup on top so thick it can't run down the sides. You won't be happy to eat until both faces of each pancake have at least touched the syrup, but right now only one face of the top pancake has.
You know that the syrup will never soak through even one pancake, but it can be transferred indefinitely via face-to-face contact between two pancakes. Once a face of a pancake has touched syrup it is considered coated in syrup forever, and will make any non-syrup coated face that touches it syrup coated as well. It is possible to transfer syrup to and from the top side of the plate as well.
You proceed to coat every pancake face with syrup by inserting a spatula below one or more pancakes and flipping them all over, exactly as is done in pancake sorting. (Unfortunately this spatula is syrup-resistant, and does not help to distribute the syrup by touching pancake faces.) Sadly you lose track of which pancake faces have touched syrup but you do remember the flips you have made.
Given your past flips can you determine if your pancakes are all coated with syrup yet?
Challenge
Write a program that takes in a positive integer N for the number of pancakes, and a list of positive integers (all &lt;= N) for the flips you have made so far. Each number in the list represents the number of pancakes that were flipped. Output a truthy value if the pancakes are done being coated and a falsy value if not. (truthy/falsy definition)
The input should come from stdin or the command line and the output should go to stdout (or closest alternatives). It's fine if your input needs a little extra formatting: e.g. [1, 1, 2, 2] instead of 1 1 2 2 for the list.
Examples
Assume N = 2, so we have a stack of two pancakes on a plate, starting with the syrup on top.
If the list is 1 1 2 2, this means we...

flip the top pancake - coating the upper face of the bottom pancake
flip the top again - coating the original bottom face of the top pancake
flip both - coating the plate
flip both again - coating the original bottom face of the bottom pancake

Since all four faces are coated the output would be something like True or 1.
If the list is 1 2 2 1, this means we...

flip the top pancake - coating the upper face of the bottom pancake
flip both - coating nothing
flip both again - coating nothing
flip the top again - coating the original bottom face of the top pancake

Since the face touching the plate is still syrup-free the output would be something like False or 0.
Notes

The flip list may be arbitrarily large and can be empty, in which case the output is falsy.
The plate acts as a syrup-carrier but it doesn't matter if it gets coated or not. (In fact any flip solution will coat the plate because the pancake face it touches must be coated, but regardless.)
The plate cannot be flipped.
You can assume these pancakes are unit disks with no sides to speak of, only two opposite faces.

Scoring
This is code-golf. The shortest solution in bytes wins.
Haskell, 92 90 86 84 114 110 99 98
the requirement of a full program is so annoying. I wonder why would anyone require this.
m(n:s)=all(&lt;1)$foldl(\r@(p:s)n-&gt;reverse(take n s)++(p*r!!n):drop n s)[0..n]s
main=readLn&gt;&gt;=print.m

this solution works by representing the pile of pancakes by a list of the sides, when adjacent pancakes share the same side. every side is a number, and a side is coated if it has a zero value.
run as:
*Main&gt; main
[2,1,1,2,2]
True