import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
{
Set<Xyz> l1 = new HashSet<>();
for (int i = 1; i <= 9; i++)
l1.add(new Xyz(i, i, i));
for (int i = 1; i <= 7; i++)
l1.add(new Xyz(i, i + 1, i + 2));
Set<Xyz> l2 = new HashSet<>();
for (Xyz x1 : l1)
for (Xyz x2 : l1) {
Xyz x3 = x1.addNew(x2);
if (x3 != null)
l2.add(x3);
}
Set<Xyz> l4 = new HashSet<>();
for (Xyz x1 : l2)
for (Xyz x2 : l2) {
Xyz x3 = x1.addNew(x2);
if (x3 != null)
l4.add(x3);
}
Set<Xyz> lh = new HashSet<>();
for (int i = 1; i <= 9; i++)
lh.add(new Xyz(i));
Set<Xyz> l5 = new HashSet<>();
for (Xyz x1 : l4)
for (Xyz x2 : lh) {
Xyz x3 = x1.addNew(x2);
if (x3 != null)
l5.add(x3);
}
int[] d = new int[11];
Scanner in
= new Scanner
(System.
in); for (int i = 0; i < line.length(); i++) {
d
[Integer.
parseInt(line.
substring(i, i
+ 1))]++; }
Set<String> answer = new HashSet<>();
for (int i = 1; i <= 9; i++) {
d[i]++;
for (Xyz x : l5) {
if (x.match(d)) {
List
<String
> ls
= x.
erase(Integer.
toString(i
)); answer.add(s);
}
}
d[i]--;
}
}
}
class Xyz
{
int[] c;
int l;
Xyz() {
c = new int[11];
l = 0;
}
Xyz(int x, int y, int z) {
this();
add(x, y, z);
}
Xyz(int x) {
this();
add(x);
}
Xyz(Xyz xyz) {
m
= Arrays.
copyOf(xyz.
m, xyz.
m.
length); c
= Arrays.
copyOf(xyz.
c, xyz.
c.
length); l = xyz.l;
}
boolean match(int[] d) {
}
boolean add(int x, int y, int z) {
if (l == 5) return false;
if (x == y && c[x] > 1) return false;
if (c[x] > 3 || c[y] > 3 || c[z] > 3) return false;
m
[l
++] = Integer.
toString(x
* 100 + y
* 10 + z
); c[x]++; c[y]++; c[z]++;
return true;
}
boolean add(int x) {
if (l == 5) return false;
if (c[x] > 2) return false;
m
[l
++] = Integer.
toString(x
* 10 + x
); c[x] += 2;
return true;
}
boolean add(Xyz xyz) {
if (l + xyz.l > 5) return false;
for (int i = 1; i < 10; i++) {
if (c[i] + xyz.c[i] > 4) return false;
}
for (int i = 0; i < xyz.l; i++) {
m[i + l] = xyz.m[i];
}
l += xyz.l;
for (int i = 1; i < 10; i++) {
c[i] += xyz.c[i];
}
return true;
}
Xyz addNew(Xyz o) {
Xyz xyz = new Xyz(this);
if(xyz.add(o))
return xyz;
else
return null;
}
List
<String
> erase
(String k
) { List<String> ls = new ArrayList<>();
for (int i = 0; i < l; i++) {
if (m[i].indexOf(k) < 0) continue;
for (int j = 0; j < l; j++)
if (j == i)
x += "[" + m[j].replaceFirst(k, "") + "]";
else
x += "(" + m[j] + ")";
ls.add(x);
}
return ls;
}
public int hashCode() {
}
public boolean equals
(Object o
){ Xyz xyz = (Xyz)o;
return Arrays.
equals(m, xyz.
m); }
}
}
CmltcG9ydCBqYXZhLnV0aWwuKjsKaW1wb3J0IGphdmEubGFuZy4qOwppbXBvcnQgamF2YS5pby4qOwoKY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVNldDxYeXo+IGwxID0gbmV3IEhhc2hTZXQ8PigpOwoJCWZvciAoaW50IGkgPSAxOyBpIDw9IDk7IGkrKykKCQkJbDEuYWRkKG5ldyBYeXooaSwgaSwgaSkpOwoJCWZvciAoaW50IGkgPSAxOyBpIDw9IDc7IGkrKykKCQkJbDEuYWRkKG5ldyBYeXooaSwgaSArIDEsIGkgKyAyKSk7CgkJCQoJCVNldDxYeXo+IGwyID0gbmV3IEhhc2hTZXQ8PigpOwoJCWZvciAoWHl6IHgxIDogbDEpCgkJCWZvciAoWHl6IHgyIDogbDEpIHsKCQkJCVh5eiB4MyA9IHgxLmFkZE5ldyh4Mik7CgkJCQlpZiAoeDMgIT0gbnVsbCkKCQkJCQlsMi5hZGQoeDMpOwoJCQl9CgkJCgkJU2V0PFh5ej4gbDQgPSBuZXcgSGFzaFNldDw+KCk7CgkJZm9yIChYeXogeDEgOiBsMikKCQkJZm9yIChYeXogeDIgOiBsMikgewoJCQkJWHl6IHgzID0geDEuYWRkTmV3KHgyKTsKCQkJCWlmICh4MyAhPSBudWxsKQoJCQkJCWw0LmFkZCh4Myk7CgkJCX0KCQkKCQlTZXQ8WHl6PiBsaCA9IG5ldyBIYXNoU2V0PD4oKTsKCQlmb3IgKGludCBpID0gMTsgaSA8PSA5OyBpKyspCgkJCWxoLmFkZChuZXcgWHl6KGkpKTsKCQkKCQlTZXQ8WHl6PiBsNSA9IG5ldyBIYXNoU2V0PD4oKTsKCQlmb3IgKFh5eiB4MSA6IGw0KQoJCQlmb3IgKFh5eiB4MiA6IGxoKSB7CgkJCQlYeXogeDMgPSB4MS5hZGROZXcoeDIpOwoJCQkJaWYgKHgzICE9IG51bGwpCgkJCQkJbDUuYWRkKHgzKTsKCQkJfQoJCQoJCWludFtdIGQgPSBuZXcgaW50WzExXTsKCQkKCQlTY2FubmVyIGluID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKCQlTdHJpbmcgbGluZSA9IGluLm5leHQoKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoKCk7IGkrKykgewoJCQlkW0ludGVnZXIucGFyc2VJbnQobGluZS5zdWJzdHJpbmcoaSwgaSArIDEpKV0rKzsKCQl9CgkJCgkJU2V0PFN0cmluZz4gYW5zd2VyID0gbmV3IEhhc2hTZXQ8PigpOwoJCQoJCWZvciAoaW50IGkgPSAxOyBpIDw9IDk7IGkrKykgewoJCQlkW2ldKys7CgkJCWZvciAoWHl6IHggOiBsNSkgewoJCQkJaWYgKHgubWF0Y2goZCkpIHsKCQkJCQlMaXN0PFN0cmluZz4gbHMgPSB4LmVyYXNlKEludGVnZXIudG9TdHJpbmcoaSkpOwoJCQkJCWZvciAoU3RyaW5nIHMgOiBscykKCQkJCQkJYW5zd2VyLmFkZChzKTsKCQkJCX0KCQkJfQoJCQlkW2ldLS07CgkJfQoJCQoJCWZvciAoU3RyaW5nIHMgOiBhbnN3ZXIpCgkJCVN5c3RlbS5vdXQucHJpbnRsbihzKTsKCX0KfQoKY2xhc3MgWHl6CnsKCVN0cmluZ1tdIG07CglpbnRbXSBjOwoJaW50IGw7CglYeXooKSB7CgkJbSA9IG5ldyBTdHJpbmdbNV07CgkJYyA9IG5ldyBpbnRbMTFdOwoJCWwgPSAwOwoJfQoJWHl6KGludCB4LCBpbnQgeSwgaW50IHopIHsKCQl0aGlzKCk7CgkJYWRkKHgsIHksIHopOwoJfQoJWHl6KGludCB4KSB7CgkJdGhpcygpOwoJCWFkZCh4KTsKCX0KCVh5eihYeXogeHl6KSB7CgkJbSA9IEFycmF5cy5jb3B5T2YoeHl6Lm0sIHh5ei5tLmxlbmd0aCk7CgkJYyA9IEFycmF5cy5jb3B5T2YoeHl6LmMsIHh5ei5jLmxlbmd0aCk7CgkJbCA9IHh5ei5sOwoJfQoJYm9vbGVhbiBtYXRjaChpbnRbXSBkKSB7CgkJcmV0dXJuIEFycmF5cy5lcXVhbHMoYywgZCk7Cgl9Cglib29sZWFuIGFkZChpbnQgeCwgaW50IHksIGludCB6KSB7CgkJaWYgKGwgPT0gNSkgcmV0dXJuIGZhbHNlOwoJCWlmICh4ID09IHkgJiYgY1t4XSA+IDEpIHJldHVybiBmYWxzZTsKCQlpZiAoY1t4XSA+IDMgfHwgY1t5XSA+IDMgfHwgY1t6XSA+IDMpIHJldHVybiBmYWxzZTsgCgkJbVtsKytdID0gSW50ZWdlci50b1N0cmluZyh4ICogMTAwICsgeSAqIDEwICsgeik7CgkJQXJyYXlzLnNvcnQobSwgMCwgbCk7CgkJY1t4XSsrOyBjW3ldKys7IGNbel0rKzsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWJvb2xlYW4gYWRkKGludCB4KSB7CgkJaWYgKGwgPT0gNSkgcmV0dXJuIGZhbHNlOwoJCWlmIChjW3hdID4gMikgcmV0dXJuIGZhbHNlOwoJCW1bbCsrXSA9IEludGVnZXIudG9TdHJpbmcoeCAqIDEwICsgeCk7CgkJQXJyYXlzLnNvcnQobSwgMCwgbCk7CgkJY1t4XSArPSAyOwoJCXJldHVybiB0cnVlOwoJfQoJYm9vbGVhbiBhZGQoWHl6IHh5eikgewoJCWlmIChsICsgeHl6LmwgPiA1KSByZXR1cm4gZmFsc2U7CgkJZm9yIChpbnQgaSA9IDE7IGkgPCAxMDsgaSsrKSB7CgkJCWlmIChjW2ldICsgeHl6LmNbaV0gPiA0KSByZXR1cm4gZmFsc2U7CgkJfQoJCWZvciAoaW50IGkgPSAwOyBpIDwgeHl6Lmw7IGkrKykgewoJCQltW2kgKyBsXSA9IHh5ei5tW2ldOwoJCX0KCQlsICs9IHh5ei5sOwoJCUFycmF5cy5zb3J0KG0sIDAsIGwpOwoJCWZvciAoaW50IGkgPSAxOyBpIDwgMTA7IGkrKykgewoJCQljW2ldICs9IHh5ei5jW2ldOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCVh5eiBhZGROZXcoWHl6IG8pIHsKCQlYeXogeHl6ID0gbmV3IFh5eih0aGlzKTsKCQlpZih4eXouYWRkKG8pKQoJCQlyZXR1cm4geHl6OwoJCWVsc2UKCQkJcmV0dXJuIG51bGw7Cgl9CglMaXN0PFN0cmluZz4gZXJhc2UoU3RyaW5nIGspIHsKCQlMaXN0PFN0cmluZz4gbHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IGw7IGkrKykgewoJCQlpZiAobVtpXS5pbmRleE9mKGspIDwgMCkgY29udGludWU7CgkJCVN0cmluZyB4ID0gIiI7CgkJCWZvciAoaW50IGogPSAwOyBqIDwgbDsgaisrKQoJCQkJaWYgKGogPT0gaSkKCQkJCQl4ICs9ICJbIiArIG1bal0ucmVwbGFjZUZpcnN0KGssICIiKSArICJdIjsKCQkJCWVsc2UKCQkJCQl4ICs9ICIoIiArIG1bal0gKyAiKSI7CgkJCWxzLmFkZCh4KTsKCQl9CgkJcmV0dXJuIGxzOwoJfQoJcHVibGljIGludCBoYXNoQ29kZSgpIHsKCQlyZXR1cm4gQXJyYXlzLmhhc2hDb2RlKG0pOwoJfQoJcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKXsKCQlYeXogeHl6ID0gKFh5eilvOwoJCXJldHVybiBBcnJheXMuZXF1YWxzKG0sIHh5ei5tKTsKCX0KCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CgkJcmV0dXJuIEFycmF5cy50b1N0cmluZyhtKTsKCX0KfQ==