#include <stdio.h>

int top;

int Stack(int stack[], int a, int &pre)
{
	if (a <= pre)
	{
		if (stack[--top] != a)
		{
			//printf("%d %d\n", stack[top],a);
			return 0;
			
		}
		else return 1;
	}
	for (int i = pre + 1; i <= a; i++)
	{
		stack[top++] = i;
	}
	top--;
	pre = a;
	return 1;
}

int main(int argc, char *argv[])
{
	int n;
	int a, stack[105];
	while (scanf("%d", &n) != EOF)
	{
		if(n==0) break;
		top = 1;
		stack[0]=0;
		int pre = 0;
		int flag = 1;
		for (int i = 0; i < n; i++)
		{
			scanf("%d", &a);
			if (flag == 1)
			{
				flag = Stack(stack, a, pre);
				/*for (int j=1; j<top; j++ )
				{
					printf("%d ",stack[j]);
				}
				printf("\n");*/
			}
		}

		if (flag == 1)
		{
			printf("Yes\n");
		}else
			printf("No\n");
	}
	
	return 0;
}

/**************************************************************
	Problem: 2119
	User: admin
	Language: C++
	Result: Accepted
	Time:11 ms
	Memory:1144 kb
****************************************************************/