#include #define REP(x,y,z) for(int x=y;x<=z;x++) #define FORD(x,y,z) for(int x=y;x>=z;x--) #define MSET(x,y) memset(x,y,sizeof(x)) #define FOR(x,y) for(__typeof(y.begin()) x=y.begin();x!=y.end();x++) #define F first #define S second #define MP make_pair #define PB push_back #define SZ size() #define M 105 void RI(){} template void RI( int& head, T&... tail ) { scanf("%d",&head); RI(tail...); } using namespace std; typedef long long LL; int n,m; int in[M],in2[M]; int cur[M]; int main() { int x,y; while(~scanf("%d %d",&n,&m)) { REP(i,1,n) cur[i]=i; REP(i,1,m) { RI(x,y); swap(cur[x], cur[y]); } REP(i,1,n) RI(in2[i]); REP(i,1,n) in[in2[i]]=i; vector> vec; REP(i,1,n) { if(in[i]!=cur[i]) { int pos=-1; REP(j,i,n) if(cur[j]==in[i]) { pos = j; break; } FORD(j,pos-1,i) { vec.PB(MP(j,j+1)); swap(cur[j], cur[j+1]); } } } printf("%d\n",vec.SZ); FOR(i,vec) printf("%d %d\n",i->F,i->S); REP(i,1,n) assert(cur[i]==in[i]); } return 0; }