/* * Model solution * * Gyojun Youn * youn [dot] gyojun [at] gmail [dot] com */ #include #include #include #include using namespace std; const int MX = 1 << 12; void no() { puts("NO"); exit(0); } int A[MX], B[MX]; int W[MX * MX]; int N, M, Q; void f(int i) { if (i < 0 || N <= i + 1 || A[i] > A[i + 1]) no(); swap(A[i], A[i + 1]); W[Q++] = i << 1; } void g(int i, bool e) { if (i < 0 || N <= i + 1 || (A[i + 1] < A[i]) != e) no(); rotate(A + i, A + i + 1, A + N--); if (!e) A[i] = A[N]; W[Q++] = (i << 1) | 1; } int main() { scanf("%d%d", &N, &M); for (int i = 0; i < N; i++) scanf("%d", A + i); for (int i = 0; i < M; i++) { int x; scanf("%d", &x); B[x] = i + 1; } for (int i = N, m = N + 1; i--;) { if (A[i] < m) { m = A[i]; continue; } if (B[A[i]]) continue; int p = i; while (A[p] < A[p + 1]) f(p++); g(p, true); } for (int i = 0; i < N;) { if (!B[A[i]]) { g(i - 1, false); continue; } int p = i; while (p && B[A[p]] < B[A[p - 1]]) f(--p); i++; } if (N != M) no(); for (int i = M; i--;) if (i + 1 != B[A[i]]) no(); printf("YES\n%d\n", Q); for (int i = 0; i < Q; i++) { int x = W[i]; printf("%d %d\n", 1 + (x & 1), 1 + (x >> 1)); } return 0; }