#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } const long long MAX = 5100000; const long long INF = 1LL << 60; const long long mod = 1000000007LL; //const long long mod = 998244353LL; using namespace std; typedef unsigned long long ull; typedef long long ll; int main() { /* cin.tie(nullptr); ios::sync_with_stdio(false); */ ll N, K; scanf("%lld %lld", &N, &K); vector t(N); for (ll i = 0; i < N; i++) t[i] = i; for (ll i = 0; i < K; i++) { ll x, y; scanf("%lld %lld", &x, &y); x--; y--; swap(t[x], t[y]); } vector a(N); for (ll i = 0; i < N; i++) { ll x; scanf("%lld", &x); a[x - 1] = i + 1; } map mp; for (ll i = 0; i < N; i++) { mp[a[i] - 1] = i; } for (ll i = 0; i < N; i++) printf("%lld ", t[i]); puts(""); for (ll i = 0; i < N; i++) { t[i] = mp[t[i]]; } vector> res; for (ll i = N - 1; i >= 0; i--) { for (ll j = N - 1; j > 0; j--) { if (t[j - 1] > t[j]) { res.emplace_back(j - 1, j); swap(t[j - 1], t[j]); } } } cout << res.size() << "\n"; for (ll i = 0; i < res.size(); i++) { printf("%lld %lld\n", res[i].first + 1, res[i].second + 1); } return 0; }