//康托,康托逆
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
int a[10010],f[10010];
void jiecheng(int n)
{
f[0]=f[1]=1;
for(int i=2;i<=n;i++)
{
f[i]=f[i-1]*i;
}
}
signed main()
{
cin>>n>>k;
jiecheng(n);
while(k--)
{
char c;
cin>>c;
if(c=='Q')
{
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
int ans=1;
for(int i=1;i<=n;i++)
{
int cnt=0;
for(int j=i+1;j<=n;j++)
{
if(a[j]<a[i])
cnt++;//有几个比a[i]小的
}
ans+=cnt*f[n-i];
}
printf("%lld\n",ans);
}
if(c=='P')
{
int x;
scanf("%lld",&x);
x--;
vector<int> g,ans;
for(int i=1;i<=n;i++)
{
g.push_back(i);
}
for(int i=n;i>=1;i--)
{
int pos=x/f[i-1];
x%=f[i-1];
ans.push_back(g[pos]);
g.erase(g.begin()+pos);
}
for(auto it=ans.begin();it!=ans.end();it++)
{
printf("%lld ",*it);
}
printf("\n");
}
}
return 0;
}