#include <stdio.h>
#include <stdlib.h>

typedef struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;

TreeNode* newNode(int val) {
    TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
    node->val = val;
    node->left = node->right = NULL;
    return node;
}

// Recursive mirror check
int isMirror(TreeNode* t1, TreeNode* t2) {
    if (t1 == NULL && t2 == NULL) return 1;
    if (t1 == NULL || t2 == NULL) return 0;
    return (t1->val == t2->val) &&
           isMirror(t1->left, t2->right) &&
           isMirror(t1->right, t2->left);
}

int main() {
    int n;
    if (scanf("%d", &n) != 1 || n < 1 || n > 10000) {
        printf("Invalid input\n");
        return 0;
    }

    int arr[10005];
    for (int i = 0; i < n; i++) {
        if (scanf("%d", &arr[i]) != 1) {
            printf("Invalid input\n");
            return 0;
        }
    }

    // Build nodes array
    TreeNode* nodes[10005];
    for (int i = 0; i < n; i++) {
        if (arr[i] == -1) nodes[i] = NULL;
        else nodes[i] = newNode(arr[i]);
    }

    // Connect children
    for (int i = 0; i < n; i++) {
        if (nodes[i] != NULL) {
            int leftIdx = 2 * i + 1;
            int rightIdx = 2 * i + 2;
            if (leftIdx < n) nodes[i]->left = nodes[leftIdx];
            if (rightIdx < n) nodes[i]->right = nodes[rightIdx];
        }
    }

    TreeNode* root = nodes[0];
    if (root == NULL) {
        printf("Symmetric\n");
        return 0;
    }

    if (isMirror(root->left, root->right))
        printf("Symmetric\n");
    else
        printf("Not Symmetric\n");

    return 0;
}#include <stdio.h>
#include <stdlib.h>

typedef struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;

TreeNode* newNode(int val) {
    TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
    node->val = val;
    node->left = node->right = NULL;
    return node;
}

// Recursive mirror check
int isMirror(TreeNode* t1, TreeNode* t2) {
    if (t1 == NULL && t2 == NULL) return 1;
    if (t1 == NULL || t2 == NULL) return 0;
    return (t1->val == t2->val) &&
           isMirror(t1->left, t2->right) &&
           isMirror(t1->right, t2->left);
}

int main() {
    int n;
    if (scanf("%d", &n) != 1 || n < 1 || n > 10000) {
        printf("Invalid input\n");
        return 0;
    }

    int arr[10005];
    for (int i = 0; i < n; i++) {
        if (scanf("%d", &arr[i]) != 1) {
            printf("Invalid input\n");
            return 0;
        }
    }

    // Build nodes array
    TreeNode* nodes[10005];
    for (int i = 0; i < n; i++) {
        if (arr[i] == -1) nodes[i] = NULL;
        else nodes[i] = newNode(arr[i]);
    }

    // Connect children
    for (int i = 0; i < n; i++) {
        if (nodes[i] != NULL) {
            int leftIdx = 2 * i + 1;
            int rightIdx = 2 * i + 2;
            if (leftIdx < n) nodes[i]->left = nodes[leftIdx];
            if (rightIdx < n) nodes[i]->right = nodes[rightIdx];
        }
    }

    TreeNode* root = nodes[0];
    if (root == NULL) {
        printf("Symmetric\n");
        return 0;
    }

    if (isMirror(root->left, root->right))
        printf("Symmetric\n");
    else
        printf("Not Symmetric\n");

    return 0;
}