#include<bits/stdc++.h>
using namespace std;
struct Node{
  int key;
  Node *right,*left,*parent;
};
Node *root,*NIL;

Node * tmin(Node *x){
  while(x->left!=NIL)x=x->left;
  return x;
}
Node * treeSuccessor(Node *x){
  if(x->right!=NIL)return tmin(x->right);
  Node *y=x->parent;
  while(y!=NIL&&x==y->right){
    x=y;
    y=y->parent;
  }
  return y;
}

void tdel(Node *z){
  Node *y;
  Node *x;

  if(z->left==NIL||z->right==NIL)y=z;
  else y=treeSuccessor(z);
  if(y->left!=NIL){
    x=y->left;
  }
  else{
    x=y->right;
  }
  if(x!=NIL){
    x->parent = y->parent;
  }
  if(y->parent==NIL){
    root=x;
  }
  else{
    if(y==y->parent->left){
      y->parent->left=x;
    }
    else{
      y->parent->right=x;
    }
  }
  if(y!=z){
    z->key = y->key;
  }
  free(y);
}

Node * find(Node *u,int k){
  while(u != NIL && k!=u->key){
    if(k<u->key)u=u->left;
    else u = u -> right;
  }
  return u;
}
void insert(int k){
    Node *y = NIL;
  Node *x = root;
  Node *z;
  z=(Node *)malloc(sizeof(Node));
  z->key = k;
  z->left = NIL;
  z->right = NIL;

  while(x!=NIL){
    y=x;
    if(z->key < x->key){
      x=x->left;
    }else{
      x=x->right;
    }
  }
  z->parent = y;
  if(y==NIL){
    root = z;
  }else{
    if(z->key < y->key){
      y->left = z;
    }else{
      y->right = z;
    }
  }
}
void inorder(Node *u){
  if(u==NIL)return;
  inorder(u->left);
  cout << " " << u->key;
  inorder(u->right);
}
void preorder(Node *u){
  if(u==NIL)return;
  cout << " " << u->key;
  preorder(u->left);
  preorder(u->right);
}
int main(){
  int n,m;
  string func;
  cin >> n;
  for(int i=0;i<n;i++){
    cin >> func;
    if(func=="find"){
      cin >> m;
      Node *t=find(root,m);
      if(t!=NIL)cout << "yes" << endl;
      else cout << "no" << endl;
    }
    else if(func=="insert"){
      cin >> m;
      insert(m);
    }
    else if(func=="print"){
      inorder(root);
      cout << endl;
      preorder(root);
      cout << endl;
    }
    else if(func=="delete"){
      cin >> m;
      tdel(find(root,m));
    }
  }
  return 0;
  
}
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;

#define mp make_pair
#define ff first
#define ss second
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define all(v) v.begin(),v.end()

const int maxn = 1e5 + 100;
const ll inf = 2e18, mod = 1e9 + 7;

int n, a[maxn];

bool bad()
{
	for (int i = 0; i < n; i++)
		if (a[i] != 1)
			return false;
	return true;
}

void solve(int turn = 0)
{
	if (bad())
	{
		cout << ((1 - turn) ? "Second" : "First") << endl;
		return;
	}
	int parity = 0;
	bool check = false;
	for (int i = 0; i < n; i++)
		parity ^= (a[i] & 1), check |= (a[i] == 1);
	if (check)
	{
		if (parity ^ (n & 1))
			cout << (turn ? "Second" : "First") << endl;
		else
			cout << ((1 - turn) ? "Second" : "First") << endl;
		return;
	}
	if (n & 1)
	{
		if (!parity)
		{
			cout << (turn ? "Second" : "First") << endl;
			return;
		}
		else
		{
			int cnt = 0;
			for (int i = 0; i < n; i++)
				cnt += (a[i] & 1);
			if (cnt > 1)
			{
				cout << ((1 - turn) ? "Second" : "First") << endl;
				return;
			}
			else
			{
				for (int i = 0; i < n; i++)
					if (a[i] & 1)
						a[i]--;
				int GCD = a[0];
				for (int i = 1; i < n; i++)
					GCD = __gcd(a[i], GCD);
				for (int i = 0; i < n; i++)
					a[i] /= GCD;
				solve(1 - turn);
			}
		}
	}
	else
	{
		if (!parity)
			cout << ((1 - turn) ? "Second" : "First") << endl;
		else
			cout << (turn ? "Second" : "First") << endl;
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	solve();
}

