#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int vis[120][120];
int vl,vr;
int ok;
int key;
struct node
{
int l,r;
int fa;
int op;
};
node str[100000];
int ans[100000];
void bfs()
{
int l=0,r=1;
node next;
str[0].l=0;
str[0].r=0;
str[0].fa=0;
while(l<r)
{
//printf("%d %d...\n",str[l].l,str[l].r);
vis[str[l].l][str[l].r]=1;
if(str[l].l==key||str[l].r==key)
{
ok=1;
int len=0;
while(str[l].fa!=0)
{
ans[len++]=str[l].op;
l=str[l].fa;
}
ans[len]=str[l].op;
printf("%d\n",len+1);
for(int i=len;i>=0;i--)
{
if(ans[i]==1) printf("FILL(1)\n");
else if(ans[i]==2) printf("FILL(2)\n");
else if(ans[i]==3) printf("DROP(1)\n");
else if(ans[i]==4) printf("DROP(2)\n");
else if(ans[i]==5) printf("POUR(1,2)\n");
else if(ans[i]==6) printf("POUR(2,1)\n");
}
return ;
}
if(str[l].l<vl)
{
next.l=vl;
next.r=str[l].r;
next.fa=l;
next.op=1;
if(vis[next.l][next.r]==0)
str[r++]=next;
if(str[l].r>0)
{
next.l=str[l].l+str[l].r;
if(next.l>vl)
{
next.r=next.l-vl;
next.l=vl;
}
else next.r=0;
next.fa=l;
next.op=6;
if(vis[next.l][next.r]==0)
str[r++]=next;
}
}
if(str[l].r<vr)
{
next.l=str[l].l;
next.r=vr;
next.fa=l;
next.op=2;
if(vis[next.l][next.r]==0)
str[r++]=next;
if(str[l].l>0)
{
next.r=str[l].l+str[l].r;
if(next.r>vr)
{
next.l=next.r-vr;
next.r=vr;
}
else next.l=0;
next.fa=l;
next.op=5;
if(vis[next.l][next.r]==0)
str[r++]=next;
}
}
if(str[l].l>0)
{
next.l=0;
next.r=str[l].r;
next.fa=l;
next.op=3;
if(vis[next.l][next.r]==0)
str[r++]=next;
}
if(str[l].r>0)
{
next.l=str[l].l;
next.r=0;
next.fa=l;
next.op=4;
if(vis[next.l][next.r]==0)
str[r++]=next;
}
l++;
}
}
int main()
{
while(scanf("%d%d%d",&vl,&vr,&key)!=EOF)
{
memset(vis,0,sizeof(vis));
ok=0;
bfs();
if(ok==0)
printf("impossible\n");
}
return 0;
}