/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
// your code goes here
Q q = new Q();
new Producer(q);
new Consumer(q);
}
static class Q {
int n;
boolean valueSet = false;
synchronized int get() {
while (!valueSet) {
try {
wait();
e.printStackTrace();
}
}
System.
out.
println("Rec: " + n
); valueSet = false;
notify();
return n;
}
synchronized void put(int n) {
while (valueSet) {
try {
wait();
e.printStackTrace();
}
}
this.n = n;
valueSet = true;
System.
out.
println("Send: " + n
); notify();
}
}
static class Producer
implements Runnable { Q q;
public Producer(Q q) {
this.q = q;
}
@Override
public void run() {
int i = 0;
while (true) {
q.put(i++);
}
}
}
static class Consumer
implements Runnable { Q q;
public Consumer(Q q) {
this.q = q;
}
@Override
public void run() {
while (true) {
q.get();
}
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCQkgUSBxID0gbmV3IFEoKTsKICAgICAgICBuZXcgUHJvZHVjZXIocSk7CiAgICAgICAgbmV3IENvbnN1bWVyKHEpOwoJfQoJc3RhdGljIGNsYXNzIFEgewogICAgaW50IG47CiAgICBib29sZWFuIHZhbHVlU2V0ID0gZmFsc2U7CgogICAgc3luY2hyb25pemVkIGludCBnZXQoKSB7CiAgICAgICAgd2hpbGUgKCF2YWx1ZVNldCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgd2FpdCgpOwogICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjOiAiICsgbik7CiAgICAgICAgdmFsdWVTZXQgPSBmYWxzZTsKICAgICAgICBub3RpZnkoKTsKICAgICAgICByZXR1cm4gbjsKICAgIH0KCiAgICBzeW5jaHJvbml6ZWQgdm9pZCBwdXQoaW50IG4pIHsKICAgICAgICB3aGlsZSAodmFsdWVTZXQpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHdhaXQoKTsKICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLm4gPSBuOwogICAgICAgIHZhbHVlU2V0ID0gdHJ1ZTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmQ6ICIgKyBuKTsKICAgICAgICBub3RpZnkoKTsKICAgIH0KfQpzdGF0aWMgY2xhc3MgUHJvZHVjZXIgaW1wbGVtZW50cyBSdW5uYWJsZSB7CiAgICBRIHE7CgogICAgcHVibGljIFByb2R1Y2VyKFEgcSkgewogICAgICAgIHRoaXMucSA9IHE7CiAgICAgICAgbmV3IFRocmVhZCh0aGlzLCAiUiIpLnJ1bigpOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgIGludCBpID0gMDsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICBxLnB1dChpKyspOwogICAgICAgIH0KICAgIH0KfQpzdGF0aWMgY2xhc3MgQ29uc3VtZXIgaW1wbGVtZW50cyBSdW5uYWJsZSB7CiAgICBRIHE7CgogICAgcHVibGljIENvbnN1bWVyKFEgcSkgewogICAgICAgIHRoaXMucSA9IHE7CiAgICAgICAgbmV3IFRocmVhZCh0aGlzLCAiUyIpLnJ1bigpOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIHEuZ2V0KCk7CiAgICAgICAgfQogICAgfQp9Cn0=