/* -*- coding: utf-8 -*- * * 3726.cc: No.3726 Flawless Flow - yukicoder */ #include #include #include #include using namespace std; /* constant */ const int MAX_N = 500; /* typedef */ using pii = pair; /* global variables */ int as[MAX_N], bs[MAX_N]; int bps[MAX_N], cps[MAX_N + 1][MAX_N]; pii ps[MAX_N]; bool fs[MAX_N]; /* subroutines */ /* main */ int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", as + i), as[i]--; for (int i = 0; i < n; i++) scanf("%d", bs + i), bs[i]--; for (int i = 0; i < n; i++) bps[bs[i]] = i; for (int i = 0; i < n; i++) cps[0][i] = bps[as[i]]; //for (int i = 0; i < n; i++) printf(" %d", cps[0][i]); putchar('\n'); for (int i = 1; i <= n; i++) { copy(cps[i - 1], cps[i - 1] + n, cps[i]); for (int j = 0; j < n; j++) ps[j] = {abs(j - cps[i - 1][j]), j}; sort(ps, ps + n, greater()); fill(fs, fs + n, false); for (int k = 0; k < n && ps[k].first > 0; k++) { int j = ps[k].second; if (cps[i - 1][j] > j) { if (! fs[j] && ! fs[j + 1]) { swap(cps[i][j], cps[i][j + 1]); fs[j] = fs[j + 1] = true; } } else { if (! fs[j] && ! fs[j - 1]) { swap(cps[i][j], cps[i][j - 1]); fs[j] = fs[j - 1] = true; } } } } for (int j = 0; j + 1 < n; j++) if (cps[n][j] > cps[n][j + 1]) { puts("-1"); return 0; } for (int i = 0; i <= n; i++) for (int j = 0; j < n; j++) printf("%d%c", bs[cps[i][j]] + 1, (j + 1 < n) ? ' ' : '\n'); return 0; }