/*
* Problem :: 12789 / 도키도키 간식드리미
*
* Kind :: Data Structure
*
* Insight
* - 문제설명에서 주어진 그림부터
* "스택을 사용해!" 라고 말하고 있다
* + 한 명씩만 설 수 있는 공간 => 스택
* 현재 줄 서있는 곳 => 큐
* 로 다루어주자
*
* - 생각해보면 스택에는 학생들의 번호표가 top 부터
* 오름차순으로 정렬되어 있어야 한다
* + 제일 왼쪽을 top 이라고 하고 [4, 3, 5] 로 서있다면
* 4번은 3번이 받기 전까지 간식을 받을 수 없으므로
* 이들은 절대로 간식을 받을 수 없다
* # 큐의 front 부터 차례대로 학생들을 볼 때
* 1번 부터 간식을 받을 수 있으면 받지만
* 지금당장 간식을 받을 수 없다면 스택에 넣어지게 되는데
* 이 순서가 오름차순이 아닐 경우 간식을 받을 수 없다
*/
//
// BOJ
// ver.C++
//
// Created by GGlifer
//
// Open Source
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
#define endl '\n'
// Set up : Global Variables
/* None */
// Set up : Functions Declaration
/* None */
int main()
{
// Set up : I/O
ios::sync_with_stdio(false);
cin.tie(nullptr);
// Set up : Input
int N; cin >> N;
queue<int> que; /* Queue = 현재 줄 서 있는 곳 */
for (int i=0; i<N; i++) {
int no; cin >> no;
que.push(no);
}
// Process
stack<int> st; /* Stack = 한 명씩만 설 수 있는 공간 */
int c = 1; /* 현재 간식을 받을 수 있는 번호 */
bool isPossible = true;
while (not(que.empty()) || not(st.empty())) {
int f = (que.empty()) ? -1 : que.front(); /* que 의 front, 비어있으면 -1 */
int t = (st.empty()) ? -1 : st.top(); /* st 의 top, 비어있으면 -1 */
/* Queue 맨 앞의 학생이 간식을 받을 수 있다면 */
if (f > 0 && f == c) {
que.pop();
c++;
continue;
}
/* Stack 맨 위의 학생이 간식을 받을 수 있다면 */
if (t > 0 && t == c) {
st.pop();
c++;
continue;
}
/* Queue 맨 앞의 학생이 간식을 받을 수 없다면 */
if (f > 0 && f != c) {
/* Stack 맨 위의 학생의 번호가
* Queue 맨 앞의 학생의 번호보다 낮다면 */
if (t > 0 && t < f) {
isPossible = false; /* 모두 간식받기는 불가능 */
break;
}
/* Stack 맨 위의 학생의 번호가
* Queue 맨 앞의 학생의 번호보다 높다면 */
st.push(f);
que.pop();
}
}
// Control : Output
cout << ((isPossible) ? "Nice" : "Sad") << endl;
}
// Helper Functions
/* None */