#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
****************************************************************/