#include int a[101], b[101]; void change(int &a, int &b) { int c = a; a = b; b = c; } int soeji(int n, int size) { int i; for( i = 0; i < size; i++) { if( a[n] == b[i] ) return i; } return 0; } int main(void) { int i, j, n, k, x[6000], l, c[6000]; scanf("%d %d", &n, &k); for( i = 0; i < k; i++) { scanf("%d %d", &x[i], &l); } for( i = 0; i < n; i++) { scanf("%d", &a[i]); } for( i = 0; i <= n; i++) { int pass = 0, l = i+1; for( j = 0; j < k; j++) { if( x[j] == l ) { l++; } else if ( x[j]+1 == l ) { l--; } } b[i] = l; } int path = 0; for( i = 0; i < n-1; i++) { if( a[i] != b[i] ) { int r = soeji(i, n); while( r > i ) { c[path] = i + (r-i) -1; change( b[c[path]], b[c[path]+1] ); path++; r--; } } } printf("%d\n",path); for( i = 0; i < path; i++) { printf("%d %d\n",c[i]+1 ,c[i]+2 ); } return 0; }