import java.io.*;
public class Test {
public static void main (String[] args)
{
Tile tl = new Tile();
}
}
/********************/
/* クラスTileの定義 */
/********************/
class Tile {
int row = 3, col = 6, n13 = 2, n12 = 6;
/******************/
/* コンストラクタ */
/******************/
Tile ()
{
int i1, i2, i3, i4, i5, i6, k, k3, k2, s, a[][] = new int [row][col];
long n;
for (i1 = 0; i1 <= n13; i1++) {
if (i1 == 0) {
k = 1;
k3 = 0;
k2 = 1;
s = 1;
}
else {
k = 0;
k3 = 1;
k2 = 0;
s = 0;
}
for (i2 = k; i2 <= n12; i2++) {
for (i3 = 0; i3 < row; i3++) {
for (i4 = 0; i4 < col; i4++)
a[i3][i4] = 0;
}
n = 0;
for (i5 = 0; i5 < row; i5++) {
for (i6 = 0; i6 < col; i6++) {
n = set(i1, i2, k3, k2, s, 0, i5, i6, n, a);
n = set(i1, i2, k3, k2, s, 1, i5, i6, n, a);
}
}
System.out.println(n + " (" + i1 + " " + i2 + ")");
}
}
}
/*******************************/
/* タイルの設定 */
/* n3 : 1 x 3 の枚数 */
/* n2 : 1 x 2 の枚数 */
/* k3 : 1 x 3 の設定数 */
/* k2 : 1 x 2 の設定数 */
/* s : =0 : 1 x 3 の設定 */
/* =1 : 1 x 2 の設定 */
/* vh : =0 : 縦 */
/* =1 : 横 */
/* y,x : 設定位置(行と列) */
/* m : 現時点の場合の数 */
/* a : 設定状況 */
/*******************************/
long set(int n3, int n2, int k3, int k2, int s, int vh, int y, int x, long m, int a[][])
{
int i1, i2, k, kk, sw = 0, b[][] = new int [row][col];
long n = m;
// 初期設定
for (i1 = 0; i1 < row; i1++) {
for (i2 = 0; i2 < col; i2++)
b[i1][i2] = a[i1][i2];
}
// タイルの設定
// 1 x 3 の設定
if (s == 0) {
if (vh == 0) { // 縦
if (y < row-2) {
if (b[y][x] == 0 && b[y+1][x] == 0 && b[y+2][x] == 0) {
b[y][x] = 1;
b[y+1][x] = 1;
b[y+2][x] = 1;
sw = 1;
}
}
}
else { // 横
if (x < col-2) {
if (b[y][x] == 0 && b[y][x+1] == 0 && b[y][x+2] == 0) {
b[y][x] = 1;
b[y][x+1] = 1;
b[y][x+2] = 1;
sw = 1;
}
}
}
}
// 1 x 2 の設定
else {
if (vh == 0) { // 縦
if (y < row-1) {
if (b[y][x] == 0 && b[y+1][x] == 0) {
b[y][x] = 1;
b[y+1][x] = 1;
sw = 1;
}
}
}
else { // 横
if (x < col-1) {
if (b[y][x] == 0 && b[y][x+1] == 0) {
b[y][x] = 1;
b[y][x+1] = 1;
sw = 1;
}
}
}
}
// 設定できた場合
if (sw > 0) {
// すべてのタイル設定終了
if (k3 == n3 && k2 == n2)
n++;
// 次のタイル
else {
k = col * y + x + 1;
kk = row * col - k;
sw = 0;
if (k3 < n3) {
for (i1 = k; i1 < row * col; i1++) {
if (b[i1/col][i1%col] > 0)
kk--;
}
if (3*(n3-k3) > kk)
sw = -1;
else
k3++;
}
else {
if (s == 0) {
sw = 1;
s = 1;
k2++;
}
else {
for (i1 = k; i1 < row * col; i1++) {
if (b[i1/col][i1%col] > 0)
kk--;
}
if (2*(n2-k2) > kk)
sw = -1;
else
k2++;
}
}
if (sw > 0) {
for (i1 = 0; i1 < row; i1++) {
for (i2 = 0; i2 < col; i2++) {
n = set(n3, n2, k3, k2, s, 0, i1, i2, n, b);
n = set(n3, n2, k3, k2, s, 1, i1, i2, n, b);
}
}
}
else if (sw == 0) {
for (i1 = k; i1 < row * col; i1++) {
n = set(n3, n2, k3, k2, s, 0, i1/col, i1%col, n, b);
n = set(n3, n2, k3, k2, s, 1, i1/col, i1%col, n, b);
}
}
}
}
return n;
}
}