#include using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define ALL(v) (v).begin(),(v).end() template inline bool chmax(A &a, B b) { if (a inline bool chmin(A &a, B b) { if (a>b) { a=b; return 1; } return 0; } typedef unsigned long long ull; typedef long long ll; typedef pair pii; typedef pair pll; typedef pair P; const ll INF = 1ll<<29; const ll MOD = 1000000007; const double EPS = 1e-10; int N, K; int to[100], goal[100]; int last[100]; int sbst[100]; int main() { cin >> N >> K; REP(i, N) to[i] = i; REP(i, K) { int x, y; scanf("%d %d", &x, &y); swap(to[x - 1], to[y - 1]); } REP(i, N) scanf("%d", goal + i), goal[i]--; REP(i, N) last[goal[i]] = i; REP(i, N) sbst[last[i]] = i; REP(i, N) to[i] = sbst[to[i]]; vector ans; REP(i, N) REP(j, N - i - 1) { if (to[j] > to[j + 1]) { ans.push_back(j + 1); swap(to[j], to[j + 1]); } } cout << ans.size() << endl; REP(i, ans.size()) printf("%d %d\n", ans[i], ans[i] + 1); puts(""); return 0; }