Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Problem Statement

Nathan O. Davis is a student at the department of integrated systems.

Today's agenda in the class is audio signal processing.
Nathan was given a lot of homework out.
One of the homework was to write a program to process an audio signal.
He copied the given audio signal to his USB memory and brought it back to his home.

When he started his homework, he unfortunately dropped the USB memory to the floor.
He checked the contents of the USB memory and found that the audio signal data got broken.

There are several characteristics in the audio signal that he copied.

The audio signal is a sequence of $N$ samples.

Each sample in the audio signal is numbered from $1$ to $N$ and represented as an integer value.

Each value of the odd-numbered sample(s) is strictly smaller than the value(s) of its neighboring sample(s).

Each value of the even-numbered sample(s) is strictly larger than the value(s) of its neighboring sample(s).

He got into a panic and asked you for a help.
You tried to recover the audio signal from his USB memory but some samples of the audio signal are broken and could not be recovered.
Fortunately, you found from the metadata that all the broken samples have the same integer value.

Your task is to write a program,
which takes the broken audio signal extracted from his USB memory as its input,
to detect whether the audio signal can be recovered uniquely.

Input

The input consists of multiple datasets.
The form of each dataset is described below.

$N$
$a_{1}$ $a_{2}$ ... $a_{N}$

The first line of each dataset consists of an integer, $N (2 \le N \le 1{,}000)$.
$N$ denotes the number of samples in the given audio signal.
The second line of each dataset consists of $N$ values separated by spaces.
The $i$-th value, $a_{i}$, is either a character x or an integer between $-10^9$ and $10^9$, inclusive.
It represents the $i$-th sample of the broken audio signal.
If $a_{i}$ is a character x , it denotes that $i$-th sample in the audio signal is broken.
Otherwise it denotes the value of the $i$-th sample.

The end of input is indicated by a single $0$.
This is not included in the datasets.

You may assume that the number of the datasets does not exceed $100$.

Output

For each dataset, output the value of the broken samples in one line if the original audio signal can be recovered uniquely.
If there are multiple possible values, output ambiguous.
If there are no possible values, output none.

Sample Input

5
1 x 2 4 x
2
x x
2
1 2
2
2 1
2
1000000000 x
4
x 2 1 x
0

Output for the Sample Input

3
none
ambiguous
none
ambiguous
none

Solution in C++11 (judge verdict: Wrong Answer)

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

using namespace std;
#define m 1000000000
/*
	壊れたオーディオシグナル

	ナザン・Ｏ・デヴィスは集積システム学部の学生である。

	今日の授業予定はオーディオシグナルの処理である。ナザンは大量の宿題を与えられていた。
	宿題のうちの一つはオーディオシグナルを処理するプログラムを書くことである。彼は与えられた
	オーディオシグナルをメモリにコピーし、自宅に持って帰った。

	彼は宿題を始めたとき、不幸にもUSBメモリを床に落としてしまった。彼が
	ＵＳＢメモリの中身を確認したところ、オーディオシグナルは壊れてしまっていた。

	彼がコピーしたオーディオシグナルにはいくつか特徴がある。

	・オーディオシグナルはＮ個のサンプルのつながりである。
	・オーディオシグナル中の各サンプルは1からＮの番号が振られており、
	　整数値として表現されている。
	・奇数番号のサンプルは隣接するサンプル未満である。
	・偶数番号のサンプルは隣接するサンプルより大きい。

	彼はパニックに陥り、君に助けを求めた。彼のＵＳＢメモリからオーディオシグナルを
	復元しようとしたが、オーディオシグナルのサンプルのいくつかは壊れていて復元できなかった。
	運のいいことに、メタデータから全ての壊れたサンプルには同じ値があるようだ。

	君の課題は、USBメモリから抽出された壊れたオーディオシグナルを入力として受け取り、
	オーディオシグナルがただ一通りに復元できるかどうか調べるプログラムを書くことである。

	入力
	入力は複数のデータセットからなる。データセットの形式は以下で説明する。

	各データセットの一行目は一つの整数からなる。Mは与えられたオーディオシグナル中のサンプル数である。
	各データセットの二行目はN個のスペースで区切られた値からなる。i番目の値であるa_iは
	xであるか、-10^9から10^9までの整数である。i番目の壊れたオーディオシグナルのサンプルである。
	a_iが文字xである場合、それはオーディオシグナル中のi番目のサンプルが壊れていることを示す。
	それ以外の場合はi番目のサンプルを指す。

	入力の終わりは一つの0によって示される。
	これはデータセットに含まれない。

	データセットのコスは100以下であると想定してよい。

	出力
	各データセットについて、もとのオーディオシグナルがただ一通りに復元される場合には
	壊れたサンプルを一行に出力せよ。ありうる値が複数あるときには'ambiguous'を出力せよ。
	ありうる値が一つも存在しないときは'none'を出力せよ。

*/
void push(int pos, vector< int > *smp, vector< int > *nv) {
	if( pos > 0 ) {
		int tmp;
		tmp = smp->at( pos - 1 );
		if( tmp != 1 << 30 ) nv->push_back( tmp );
	}
	if( pos < smp->size() - 1 ) {
		int tmp;
		tmp = smp->at( pos + 1 );
		if( tmp != 1 << 30 ) nv->push_back( tmp );
	}
}


int main(void){
	//FILE* fp_in = freopen("data.txt", "r", stdin);
	
	while( 1 ){
		int n;
		cin >> n;
		if( n == 0 ) break;
		vector< int > pos;
		vector< int > smp;
		vector< int > nv_max;
		vector< int > nv_min;

		for(int i = 0; i < n; i++) {
			string str;
			cin >> str;
			if( str == "x" ) {
				smp.push_back( 1 << 30 );
				pos.push_back( i );
			} else {
				smp.push_back( atoi( str.c_str() ) );
			}
		}

		for(int i = 0; i < pos.size(); i++) {
			if( pos[i] % 2 == 0 ) {
				push( pos[i], &smp, &nv_min );
			} else {
				push( pos[i], &smp, &nv_max );
			}
		}

		//最大値最小値を求める
		int max = 1 << 30, min = 1 << 30;
		max *= -1;
		for(int i = 0; i < nv_min.size(); i++)
			if( min > nv_min[i] ) min = nv_min[i];
		for(int i = 0; i < nv_max.size(); i++)
			if( max < nv_max[i] ) max = nv_max[i];

		if( smp.size() == pos.size() ) {
			cout << "none" << endl;
		} else if( pos.size() == 0 ) {
			bool flg = true;
			for(int i = 0; i < smp.size(); i++) {
				if( i == 0 ) {
					if( smp[i] >= smp[i + 1] ) 
						flg = false;
				} else if( i == smp.size() - 1 ){
					if( smp[i] <= smp[i - 1] ) 
						flg = false;
				} else {
					if( i % 2 == 0 ) {
						if( smp[i] >= smp[i + 1] || smp[i] >= smp[i - 1] )
							flg = false;
					} else {
						if( smp[i] <= smp[i + 1] || smp[i] <= smp[i - 1] )
							flg = false;
					}
				}
			}
			if( flg ) cout << "ambiguous" << endl;
			else cout << "none" << endl;
		} else if( ( nv_min.size() == 0 ) && ( min == -m + 1 ) ) {
			cout << -m << endl;
		} else if( ( nv_max.size() == 0 ) && ( max == m - 1 ) ) {
			cout << m << endl;
		} else {
			if( nv_min.size() == 0 || nv_max.size() == 0 ) {
				cout << "ambiguous" << endl;
			} else if( min - max == 2 ) {
				cout << ( max + min ) / 2 << endl;
			} else if( min - max < 2 ) {
				cout << "none" << endl;
			} else {
				cout << "ambiguous" << endl;
			}
		}

	}

	//while(1){}
    return 0;
}