#pragma warning(disable:4996)
#include<iostream>
#include<string>
#include<cmath>
#include<ctype.h>
#include<memory.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<iomanip>
#include<set>
#include<list>
#include<vector>
#include<stack>
#include<queue>
#define ll long long int
using namespace std;
const int maxn = 200;
struct node
{
int a, b;
int step;
int pre;
int op;
};
int a, b, c;
int vis[maxn][maxn];
string path[10] = {
"FILL(1)"
,"FILL(2)"
,"DROP(1)"
,"DROP(2)"
,"POUR(1,2)"
,"POUR(2,1)"
};
node q[maxn];
int front = 0, rear = 0;
void bfs(int x, int y)
{
memset(vis, 0, sizeof(vis));
node p; p.a = x; p.b = y; p.step = 0; p.pre = -1; p.op = -1;
q[rear] = p; rear++;
vis[x][y] = 1;
while (front != rear)
{
node now = q[front];
if (now.a == c || now.b == c)
{
q[rear] = now;
cout << now.step << endl;
return;
}
node next = now;
next.step++;
next.pre = front;
if (now.a < a)
{
next.a = a;
next.b = now.b;
if (!vis[next.a][next.b])
{
next.op = 0;
q[rear++] = next;
vis[next.a][next.b] = 1;
}
}
if (now.b < b)
{
next.b = b;
next.a = now.a;
if (!vis[next.a][next.b])
{
next.op = 1;
q[rear++] = next;
vis[next.a][next.b] = 1;
}
}
if (now.a > 0)
{
next.a = 0;
next.b = now.b;
if (!vis[next.a][next.b])
{
next.op = 2;
q[rear++] = next;
vis[next.a][next.b] = 1;
}
}
if (now.b > 0)
{
next.b = 0;
next.a = now.a;
if (!vis[next.a][next.b])
{
next.op = 3;
q[rear++] = next;
vis[next.a][next.b] = 1;
}
}
if (now.a > 0 && now.b < b)
{
if (now.a > b - now.b)
{
next.b = b;
next.a = now.a - (b - now.b);
}
else
{
next.a = 0;
next.b = now.b + now.a;
}
if (!vis[next.a][next.b])
{
next.op = 4;
q[rear++] = next;
vis[next.a][next.b] = 1;
}
}
if (now.b > 0 && now.a < a)
{
if (now.b > a - now.a)
{
next.a = a;
next.b = now.b - (a - now.a);
}
else
{
next.b = 0;
next.a = now.a + now.b;
}
if (!vis[next.a][next.b])
{
next.op = 5;
q[rear++] = next;
vis[next.a][next.b] = 1;
}
}
front++;
}
cout << "impossible" << endl;
}
void displayPath(int i)
{
if (q[i].pre == -1)
{
if (q[i].op != -1)
cout << path[q[i].op] << endl;
return;
}
displayPath(q[i].pre);
cout << path[q[i].op] << endl;
}
int main()
{
cin >> a >> b >> c;
bfs(0, 0);
displayPath(rear);
return 0;
}