#include using namespace std; #define mp(a,b) make_pair(a,b) #define ff first #define setp(x) setprecision(x)<>t; assert(t<=10); forz(t){ int n,m; cin>>n>>m; assert(n<=10); assert(m<=9); int arr[n], answer[n], pairs[m][2], ordered[m][2], seq[m], arr1[n]; fori(n){ cin>>arr[i]; assert(arr[i]>=1); assert(arr[i]<=inf); } fori(m){ forj(2) cin>>pairs[i][j]; assert(pairs[i][0]>=1); assert(pairs[i][1]<=n); assert(pairs[i][0]<=pairs[i][1]); } fori(n) answer[i] = arr[i]; fori(m) reverse(answer+pairs[i][0]-1, answer+pairs[i][1]); fori(m) seq[i] = i; int sum = 0; do{ fori(m) forj(2) ordered[i][j] = pairs[seq[i]][j]; fori(n) arr1[i] = arr[i]; fori(m) reverse(arr1+ordered[i][0]-1, arr1+ordered[i][1]); bool k = 1; fori(n) if(arr1[i] != answer[i]){ k = 0; break; } sum+=k; }while(next_permutation(seq,seq+m)); int overall = fakt(m); int ebob = gcd(overall,sum); sum/=ebob; overall/=ebob; cout<