#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(x) (x).begin(),(x).end() #define rep(i,m,n) for(int i = m;i < n;++i) #define pb push_back #define fore(i,a) for(auto &i:a) #define rrep(i,m,n) for(int i = m;i >= n;--i) #define INF INT_MAX/2 using namespace std; using ll = long long; using R = double; using Data = pair>; const ll MOD = 1e9 + 7; const ll inf = 1LL << 50; struct edge { ll from; ll to; ll cost; }; int main() { int n, k; cin >> n >> k; vectora(n); rep(i, 0, n)a[i] = i; rep(i, 0, k) { int x, y; cin >> x >> y; x--, y--; swap(a[x],a[y]); } vectorA(n); rep(i, 0, n) { int temp; cin >> temp; temp--; A[temp] = i; } vector>ans; rep(i, 0, n) { if (a[i] != A[i]) { int temp; rep(j, i + 1, n) { if (A[i] == a[j]) { temp = j; break; } } for (int k = temp; k >= i + 1; k--) { swap(a[k],a[k-1]); ans.pb({k,k+1}); } } } cout << ans.size() << endl; fore(i, ans)cout << i.first << " " << i.second << endl; return 0; }