1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int gb(int n,int b){
  return n>>b&1;
}
inline int cnt(int n,int l,int r){
  return __builtin_popcount(n>>l&(1<<r-l+1)-1);
}
inline ll com(int n,int m){
  ll s=1;
  for(int i=n;i>n-m;i--)
    s*=i;
  for(int i=2;i<=m;i++)
    s/=i;
  return s;
}
vector<int> encode(ll n,int v,int l){
  vector<int> c(l,-1);
  for(int b=0;b<l;b++)
    for(int i=b?c[b-1]+1:0;i<v;i++){
      ll r=com(v-i-1,l-b-1);
      if(n>=r)n-=r;
      else{c[b]=i; break;}
    }
  return c;
}
ll decode(vector<int> c,int v){
  int l=c.size();
  ll n=0;
  for(int b=0;b<l;b++)
    for(int i=b?c[b-1]+1:0;i<c[b];i++)
      n+=com(v-i-1,l-b-1);
  return n;
}
vector<int> st(vector<int> a){
  vector<int> cs(10);
  iota(cs.begin(),cs.end(),0);
  sort(cs.begin(),cs.end(),[&](int x,int y){
    for(int i=0;i<4;i++)
      if(gb(a[i],x)!=gb(a[i],y))
        return gb(a[i],x)<gb(a[i],y);
    return false;
  });
  vector<int> na(10);
  for(int i=0;i<10;i++)
    for(int j=0;j<10;j++)
      if(gb(a[i],cs[j]))na[i]|=1<<j;
  return na;
}
int main(){
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  vector<int> v,pv(1<<10,-1);
  for(int S=0;S<1<<10;S++){
    int p=__builtin_popcount(S);
    if(p==2)continue;
    if(p==4){
      if(cnt(S,8,9))v.emplace_back(S);
    }
    else if(p==6){
      if(cnt(S,8,9)!=2)v.emplace_back(S);
      else if(cnt(S,4,7)!=2)v.emplace_back(S);
    }
    else if(p==5){
      if(cnt(S,8,9)!=1)v.emplace_back(S);
      else{
        bool f=false;
        for(int i=0;i<4;i++)
          f|=cnt(S,i*2,i*2+1)!=1;
        if(f)v.emplace_back(S);
      }
    }
    else v.emplace_back(S);
  }
  for(int i=0;i<v.size();i++)
    pv[v[i]]=i;
  string tp; ll N; int t; cin>>tp>>N>>t;
  while(t--){
    if(tp[0]=='A'){
      ll n; cin>>n;
      cout<<"0000000011\n";
      cout<<"0000111100\n";
      cout<<"0011001111\n";
      cout<<"0101010101\n";
      auto c=encode(n,v.size(),6);
      for(int i:c){
        for(int j=0;j<10;j++)
          cout<<gb(v[i],j);
        cout<<'\n';
      }
      cout<<flush;
    }
    else{
      vector<int> a(10);
      for(int i=0;i<10;i++){
        string s; cin>>s;
        for(int j=0;j<10;j++)
          if(s[j]&1)a[i]|=1<<j;
      }
      for(int i=1;i<10;i++)
        if(__builtin_popcount(a[i])==2)
          swap(a[i],a[0]);
      a=st(a);
      for(int i=2;i<10;i++)
        if(__builtin_popcount(a[i])==4&&pv[a[i]]<0)
          swap(a[i],a[1]);
      a=st(a);
      for(int i=3;i<10;i++)
        if(__builtin_popcount(a[i])==6&&pv[a[i]]<0)
          swap(a[i],a[2]);
      a=st(a);
      for(int i=4;i<10;i++)
        if(__builtin_popcount(a[i])==5&&pv[a[i]]<0)
          swap(a[i],a[3]);
      a=st(a);
      vector<int> c;
      for(int i=4;i<10;i++)
        c.emplace_back(pv[a[i]]);
      sort(c.begin(),c.end());
      cout<<decode(c,v.size())<<endl;
    }
  }
  return 0;
}