/* 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 MatrixTest
{
        public int width;
        public int height;
        public int m[];
 
        public MatrixTest(int w, int h) {
                this.width = w;
                this.height = h;
                this.m = new int[w * h];
        }
 
        public int get(int x, int y) {
                return this.m[y * width + x];
        }
 
        public void set(int x, int y, int value) {
                this.m[y * width + x] = value;
        }
 
        public static void main1 
(String[] args
) {                 int w = 100, h = 200, passes = 400;
 
                int matrix[][] = new int[h][];
 
                for (int i = 0; i < h; ++i) {
                        matrix[i] = new int[w];
                }
 
                long start;
 
                start 
= System.
currentTimeMillis(); 
                // X and Y are inverted.
 
                for (int z = 0; z < passes; z++) {
                        for (int x = 0; x < w; x++) {
                                for (int y = 0; y < h; y++) {
                                        matrix[y][x]++;
                                }
                        }
                }
 
                System.
out.
print("\t" + (System.
currentTimeMillis() - start
));  
                //
 
                MatrixTest mt = new MatrixTest(w, h);
 
                start 
= System.
currentTimeMillis(); 
                for (int z = 0; z < passes; z++) {
                        for (int x = 0; x < w; x++) {
                                for (int y = 0; y < h; y++) {
                                        mt.set(x, y, mt.get(x, y) + 1);
                                }
                        }
                }
 
                System.
out.
print("\t" + (System.
currentTimeMillis() - start
));  
                //
 
                MatrixTest mt2 = new MatrixTest(w, h);
 
                start 
= System.
currentTimeMillis(); 
                for (int z = 0; z < passes; z++) {
                        for (int x = 0; x < w; x++) {
                                for (int y = 0; y < h; y++) {
                                		int wp = y * w + x;
                                        mt2.m[wp]++;
                                }
                        }
                }
 
                System.
out.
print("\t" + (System.
currentTimeMillis() - start
));         }
        public static void main 
(String[] args
) {         	for(int i=0; i< 50; i++){
        	}
        }        
 
}
				LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgTWF0cml4VGVzdAp7CiAgICAgICAgcHVibGljIGludCB3aWR0aDsKICAgICAgICBwdWJsaWMgaW50IGhlaWdodDsKICAgICAgICBwdWJsaWMgaW50IG1bXTsKICAgICAgIAogICAgICAgIHB1YmxpYyBNYXRyaXhUZXN0KGludCB3LCBpbnQgaCkgewogICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHc7CiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGg7CiAgICAgICAgICAgICAgICB0aGlzLm0gPSBuZXcgaW50W3cgKiBoXTsKICAgICAgICB9CiAgICAgICAKICAgICAgICBwdWJsaWMgaW50IGdldChpbnQgeCwgaW50IHkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1beSAqIHdpZHRoICsgeF07CiAgICAgICAgfQogICAgICAgCiAgICAgICAgcHVibGljIHZvaWQgc2V0KGludCB4LCBpbnQgeSwgaW50IHZhbHVlKSB7CiAgICAgICAgICAgICAgICB0aGlzLm1beSAqIHdpZHRoICsgeF0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgICAKICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbjEgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgICAgIGludCB3ID0gMTAwLCBoID0gMjAwLCBwYXNzZXMgPSA0MDA7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaW50IG1hdHJpeFtdW10gPSBuZXcgaW50W2hdW107CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4W2ldID0gbmV3IGludFt3XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBsb25nIHN0YXJ0OwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gWCBhbmQgWSBhcmUgaW52ZXJ0ZWQuCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yIChpbnQgeiA9IDA7IHogPCBwYXNzZXM7IHorKykgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhbeV1beF0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcdCIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCkpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgTWF0cml4VGVzdCBtdCA9IG5ldyBNYXRyaXhUZXN0KHcsIGgpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yIChpbnQgeiA9IDA7IHogPCBwYXNzZXM7IHorKykgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdC5zZXQoeCwgeSwgbXQuZ2V0KHgsIHkpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXHQiICsgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQpKTsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIE1hdHJpeFRlc3QgbXQyID0gbmV3IE1hdHJpeFRlc3QodywgaCk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBmb3IgKGludCB6ID0gMDsgeiA8IHBhc3NlczsgeisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCWludCB3cCA9IHkgKiB3ICsgeDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10Mi5tW3dwXSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlx0IiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0KSk7CiAgICAgICAgfQogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgCWZvcihpbnQgaT0wOyBpPCA1MDsgaSsrKXsKICAgICAgICAJICAgbWFpbjEobmV3IFN0cmluZ1tdeyIifSk7CgkgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIlx0Iik7CiAgICAgICAgCX0KICAgICAgICB9ICAgICAgICAKCn0=