#include <bits/stdc++.h>   using namespace std;   long long int M = 1000000007;   long long int min(long long int a, long long int b, long long int c,                     long long int d) {     long long int arr[4] = {a, b, c, d};     sort(arr, arr + 4);     return arr[0];   }   long long int max(long long int a, long long int b, long long int c,                     long long int d) {     long long int arr[4] = {a, b, c, d};     sort(arr, arr + 4);     return arr[3];   }   long long int gcd(long long int a, long long int b) {     if (b < a) {       int temp = a;       a = b;       b = temp;     }     if (a == 0) {       return b;     }     return gcd(b % a, a);   }   long long int lcm(long long int a, long long int b) {     return (a * b / gcd(a, b));   }   vector<long long int> getprimes() {     vector<long long int> pl(101, 1);     for (int i = 2; i <= 100; i++) {       if (pl[i] == 1) {         for (int j = 2 * i; j <= 100; j += i) {           pl[j] = 0;         }       }     }     return pl;   }   double distsqrd(double x1, double y1, double x2, double y2) {     return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);   }   long long int fact(long long int first) {     long long int ans = 1;     if (first == 0) {       return 1;     }     while (first > 0) {       ans = (ans * first) % 1000000007;       first--;     }     return ans % 1000000007;   }   long long int power(long long int a, long long int b) {     long long int ans = 1;     while (b > 0) {       if (b % 2 == 1) {         ans *= a;         ans = ans;       }       b /= 2;       a *= a;       a = a;     }     return ans;   }   vector<int> getbinary(int first) {     vector<int> bin(10, 0);     int iter = 0;     while (first > 0) {       if (first % 2 == 1) {         bin[iter] = 1;       } else {         bin[iter] = 0;       }       iter++;       first /= 2;     }     return bin;   }   int getnum(vector<int> bin) {     int t = 1;     int n = bin.size();     int ret = 0;     for (int i = 0; i < n; i++) {       ret += t * bin[i];       t *= 2;     }     return ret;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     int n;     cin >> n;     map<pair<int, int>, int> m1;     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= n; j++) {         int temp;         cin >> temp;         m1[make_pair(i, temp)] = j;       }     }     int b[n + 1];     map<int, int> m2;     for (int i = 1; i <= n; i++) {       cin >> b[i];       m2[b[i]] = i;     }     int ans[n + 1][n + 1];     set<int> s;     for (int i = 1; i <= n; i++) {       s.insert(i);       int no1 = -1, no2 = -1, min1 = n + 1, min2 = n + 1;       for (auto e : s) {         if (m2[e] < min1) {           min2 = min1;           min1 = m2[e];           no2 = no1;           no1 = e;         } else if (m2[e] < min2) {           min2 = m2[e];           no2 = e;         }       }       if (no2 == -1) {         no2 = no1;       }       for (int j = 1; j <= n; j++) {         if (j == no1 && j == no2) {           ans[i][j] = -1;         } else if (j != no1) {           ans[i][j] = no1;         } else if (j == no1 && j != no2) {           ans[i][j] = no2;         }       }     }     for (int j = 1; j <= n; j++) {       int min = 1e9, out;       for (int i = 1; i <= n; i++) {         if (ans[i][j] != -1) {           if (m1[make_pair(j, ans[i][j])] < min) {             min = m1[make_pair(j, ans[i][j])];             out = i;           }         }       }       cout << out <<    ;     }     cout << endl;   }