#include typedef long long ll; using namespace std; int INF = 1e9; int MOD = 1e9+7; main(){ int N,K,num[100],A[100]; cin >> N >> K; for(int i = 0;i < N;i++)num[i] = i+1; //シミュレーション for(int i = 0;i < K;i++){ int x,y; cin >> x >> y; auto xitr = find(num,num+N,x); auto yitr = find(num,num+N,y); iter_swap(xitr,yitr); } for(int i = 0;i < N;i++)cin >> A[i]; vector > v; //一致していない最小の数から調べる for(int i = 1;i <= N;i++){ int xidx = distance(num,find(num,num+N,i)); int yidx = distance(A,find(A,A+N,i)); if(xidx == yidx)continue; //一致していなかった場合iをnum[yidx]に移動させる for(int j = num[yidx];j > i;j--){ auto xitr = find(num,num+N,j); auto yitr = find(num,num+N,j-1); iter_swap(xitr,yitr); v.push_back(make_pair(j-1,j)); } } cout << v.size() << endl; for(int i = 0;i < v.size();i++){ cout << v[i].first << " " << v[i].second << endl; } }