#include <iostream>
#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define endl "\n"
#define vi vector<int>
#define vii vector<pair<int,int>>
#define pb push_back
using namespace std;
using ll = long long;
const ll mod = 1e9+7;

ll fac[1000001];

void pre(){
    fac[0]=fac[1]=1;
    for(int i=2;i<=1000001;i++)
{

    fac[i]=(fac[i-1]*1LL*i)%mod;
}
}

ll binpower(ll a,ll n){
    ll res=1;
    while(n){

    if(n%2)
        res = (res*1LL*a)%mod;

        n/=2;
        a=(a*1LL*a)%mod;

    }
    return res;

}

ll nCrmod(ll n,ll r){


ll res= fac[n];
res = (res*1LL*binpower(fac[r],mod-2))%mod;
res= (res*1LL*binpower(fac[n-r],mod-2))%mod;
return res;

}

long long ncr(int n, int r) {
    if(r > n - r) r = n - r; // because C(n, r) == C(n, n - r)
    long long ans = 1;
    int i;

    for(i = 1; i <= r; i++) {
        ans *= n - r + i;
        ans /= i;
    }

    return ans;
}
ll modexp(ll a,ll b,ll m){
    if(b==0)return 1;
    if(b%2==0){
        ll y =  modexp(a,b/2,m);
        return (y*y)%m;
    }
    else{
        return ((a%m)*modexp(a,b-1,m))%m;
    }
}

ll modinv(ll a,ll m){
return modexp(a,m-2,m);
//works only for prime m.
//else calculate phi(m)-1.
}

void SieveOfEratosthenes(ll n)
{
    // Create a boolean array "prime[0..n]" and initialize
    // all entries it as true. A value in prime[i] will
    // finally be false if i is Not a prime, else true.
    bool prime[n+1];
    memset(prime, true, sizeof(prime));

    for (ll p=2; p*p<=n; p++)
    {
        // If prime[p] is not changed, then it is a prime
        if (prime[p] == true)
        {
            // Update all multiples of p greater than or
            // equal to the square of it
            // numbers which are multiple of p and are
            // less than p^2 are already been marked.
            for (ll i=p*p; i<=n; i += p)
                prime[i] = false;
        }
    }

    // Print all prime numbers
    for (ll p=2; p<=n; p++)
       if (prime[p])
          cout << p << " ";
}

vector<int> Centroid(vector<int>g[],int n) {

        vector<int> centroid;
        vector<int> sz(n+1);
        function<void (int, int)> dfs = [&](int u, int prev) {
                sz[u] = 1;
                bool is_centroid = true;
                for (auto v : g[u]) if (v != prev) {
                        dfs(v, u);
                        sz[u] += sz[v];
                        if (sz[v] > n / 2) is_centroid = false;
                }
                if (n - sz[u] > n / 2) is_centroid = false;
                if (is_centroid) centroid.push_back(u);
        };
        dfs(1, 0);
        return centroid;
}


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin>>n;
    set<string>s;
    vector<string>v(n);
    vector<string>k;
    string ans="satisfiable";
    for(int i=0;i<n;i++){
       cin>>v[i];
       s.insert(v[i]);
       if(v[i][0]!='!')k.pb(v[i]);

           }
           for(auto x:k){
            string p=x;
            string q="!";
            for(int j=0;j<x.length();j++)q+=x[j];
            if(s.count(q)){
                ans=x;
                break;
            }
           }
    cout<<ans;



    return 0;
}

#pragma GCC optimize("O2")
#include <bits/stdc++.h>
using namespace std;
#define debug(x) cerr << (#x) << " : " << x << '\n'

void solve() {
	int n; cin >> n;
	vector<string> v;
	set<string> st;
	while (n--) {
		string s;
		cin >> s;
		if (s.front() == '!') st.emplace(s);
		else v.emplace_back(s);
	}
	for (const auto& i : v) {
		if (st.count("!" + i)) {
			cout << i << '\n';
			return;
		}
	}
	cout << "satisfiable\n";
}

// #define GTcoding
int main() {
#ifndef GTcoding
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
#else
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
	freopen("err.txt", "w", stderr);
	clock_t time = clock();
#endif
	int t = 1;
//	cin >> t;
	while (t--) solve();
#ifdef GTcoding
	cout << "\nUse "
	     << static_cast<double>(clock() - time) / CLOCKS_PER_SEC
	     << " seconds\n";
#endif
}
