#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef int T;
T** create(int N, int M)
{
T
** arr
= (T
**)malloc(2*sizeof(int)+N
*(sizeof(T
*)+M
*sizeof(T
))); *((int*)arr) = N;
*((int*)arr+1) = M;
arr = (T**)((char*)arr+2*sizeof(int));
for(int i = N, ofs = N*sizeof(T*);
i-->0; ofs += M*sizeof(T))
arr[i] = (T*)((char*)arr + ofs);
return arr;
}
void kill(T** arr)
{
free((char*)arr
-2*sizeof(int)); }
int rows(T**arr)
{
return *(int*)((char*)arr-2*sizeof(int));
}
int cols(T**arr)
{
return *(int*)((char*)arr-sizeof(int));
}
void work(T**arr)
{
for(int i = 0; i < rows(arr); ++i)
for(int j = 0; j < cols(arr); ++j)
arr[i][j] = 10*i+j;
for(int i = 0; i < rows(arr); ++i)
{
for(int j = 0; j < cols(arr); ++j)
{
}
}
}
int main(int argc, const char * argv[])
{
T** arr = create(5,8);
work(arr);
kill(arr);
arr = create(8,5);
work(arr);
kill(arr);
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBpbnQgVDsKClQqKiBjcmVhdGUoaW50IE4sIGludCBNKQp7CiAgICBUKiogYXJyID0gKFQqKiltYWxsb2MoMipzaXplb2YoaW50KStOKihzaXplb2YoVCopK00qc2l6ZW9mKFQpKSk7CiAgICAqKChpbnQqKWFycikgICA9IE47CiAgICAqKChpbnQqKWFycisxKSA9IE07CiAgICBhcnIgPSAoVCoqKSgoY2hhciopYXJyKzIqc2l6ZW9mKGludCkpOwoKICAgIGZvcihpbnQgaSA9IE4sIG9mcyA9IE4qc2l6ZW9mKFQqKTsKICAgICAgICBpLS0+MDsgb2ZzICs9IE0qc2l6ZW9mKFQpKQogICAgICAgIGFycltpXSA9IChUKikoKGNoYXIqKWFyciArIG9mcyk7CgogICAgcmV0dXJuIGFycjsKfQoKdm9pZCBraWxsKFQqKiBhcnIpCnsKICAgIGZyZWUoKGNoYXIqKWFyci0yKnNpemVvZihpbnQpKTsKfQoKaW50IHJvd3MoVCoqYXJyKQp7CiAgICByZXR1cm4gKihpbnQqKSgoY2hhciopYXJyLTIqc2l6ZW9mKGludCkpOwp9CgppbnQgY29scyhUKiphcnIpCnsKICAgIHJldHVybiAqKGludCopKChjaGFyKilhcnItc2l6ZW9mKGludCkpOwp9Cgp2b2lkIHdvcmsoVCoqYXJyKQp7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgcm93cyhhcnIpOyArK2kpCiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IGNvbHMoYXJyKTsgKytqKQogICAgICAgICAgICBhcnJbaV1bal0gPSAxMCppK2o7CgoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCByb3dzKGFycik7ICsraSkKICAgIHsKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgY29scyhhcnIpOyArK2opCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIiUwMmQgICIsYXJyW2ldW2pdKTsKICAgICAgICB9CiAgICAgICAgcHV0cygiIik7CiAgICB9Cn0KCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBUKiogYXJyID0gY3JlYXRlKDUsOCk7CiAgICB3b3JrKGFycik7CiAgICBraWxsKGFycik7CgogICAgcHV0cygiIik7CgogICAgYXJyID0gY3JlYXRlKDgsNSk7CiAgICB3b3JrKGFycik7CiAgICBraWxsKGFycik7Cgp9Cg==