STPAR - Street Parade


For sure, the love mobiles will roll again on this summer's street parade. Each year, the organisers decide on a fixed order for the decorated trucks. Experience taught them to keep free a side street to be able to bring the trucks into order.

The side street is so narrow that no two cars can pass each other. Thus, the love mobile that enters the side street last must necessarily leave the side street first. Because the trucks and the ravers move up closely, a truck cannot drive back and re-enter the side street or the approach street.

You are given the order in which the love mobiles arrive. Write a program that decides if the love mobiles can be brought into the order that the organisers want them to be.

Input

There are several test cases. The first line of each test case contains a single number n, the number of love mobiles. The second line contains the numbers 1 to n in an arbitrary order. All the numbers are separated by single spaces. These numbers indicate the order in which the trucks arrive in the approach street. No more than 1000 love mobiles participate in the street parade. Input ends with number 0.

Output

For each test case your program has to output a line containing a single word "yes" if the love mobiles can be re-ordered with the help of the side street, and a single word "no" in the opposite case.

Example

Sample input:
5
5 1 2 4 3 
0

Sample output:
yes

Illustration

The sample input reflects the following situation:

The five trucks can be re-ordered in the following way:


hide comments
akashbhalotia: 2019-05-19 13:39:49

There will be multiple test cases. 0 will be only once, after the final test case.

albertark1589: 2019-05-15 06:50:33

First of I think this is a better algo. than mine: https://www.algorithmist.com/index.php/SPOJ_STPAR
But here is my algo. : I store input in a queue because if you look at it its FIFO and I use stack for the backstreet because it is LIFO. Then I got a while loop that goes thru entire input queue until all elements are popped out. Next I have while loop that goes thru entire stack until it reaches my sentinel(-1). Finally I check if top of stack is -1. If it is then that means everything is correct so I say "yes", else I say "no". Basically the cases to check for are: (top of stack == next_num), (top of queue == next_num), last case is covered by a simple else(none of next numbers in stack/queue are == next_num).
Here might be interesting case:
5
4 1 5 3 2
output: no

Last edit: 2019-05-15 07:02:08
lord_kushal: 2019-05-14 20:38:56

i got runtime error why??

tensor08: 2019-04-25 21:43:36

hI can anyone please provide some corner case, my logic is working right even on big test cases like 1 9 5 3 2 4 8 7 6 10 15 13 11 12 14 I don't know why I am getting WA

rayten: 2019-04-25 19:22:40

@medha_08 :(

medha_08: 2019-04-25 19:21:57

why are they called love mobiles???

klmo: 2019-04-19 22:11:56

Be careful to reset the variables inside loop. Costed me like 5 WAs. Only a stack is needed, no array required. For a certain condition like when top element in stack is less than current element and current element cant be put to parade you can just skip all the next ip elements and announce it is a "no".

youknowwho37: 2019-04-12 12:08:02

AC in one go!!!

Last edit: 2019-04-12 12:08:30
avijha_98: 2019-03-28 15:54:58

It's good problem but if you think you are good coder you need to solve it within 10 minute

Last edit: 2019-03-28 15:56:42
yugamtiwari_yt: 2019-03-25 12:14:34

please make sure that you write "yes" and "no" . Costed me 3 W.A.s


Added by:Patryk Pomykalski
Date:2004-07-01
Time limit:1s-2s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: NODEJS PERL6 VB.NET
Resource:Swiss Olympiad in Informatics 2004