#include <stdio.h>
#define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0]))
#define F(a,s) while(s--) *a=*a?*a++:*(a++-1)
void printSolutions(int * solutions, int size)
{
do {
} while (--size > 0);
}
int main(int argc, char * argv[])
{
static int testCase1[] = {1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9};
static int testCase2[] = {1, 0, 0, 0, 0, 0};
static int testCase3[] = {-1, 0, 5, 0, 0, -7};
static int testCase4[] = {23, 0, 0, -42, 0, 0, 0};
static int testCase5[] = {1, 2, 3, 4};
static int testCase6[] = {-1234};
int * p;
int s;
printSolutions(testCase1, ARRAYSIZE(testCase1));
s = ARRAYSIZE(testCase1);
p = testCase1;
F(p, s);
printSolutions(testCase1, ARRAYSIZE(testCase1));
printSolutions(testCase2, ARRAYSIZE(testCase2));
s = ARRAYSIZE(testCase2);
p = testCase2;
F(p, s);
printSolutions(testCase2, ARRAYSIZE(testCase2));
printSolutions(testCase3, ARRAYSIZE(testCase3));
s = ARRAYSIZE(testCase3);
p = testCase3;
F(p, s);
printSolutions(testCase3, ARRAYSIZE(testCase3));
printSolutions(testCase4, ARRAYSIZE(testCase4));
s = ARRAYSIZE(testCase4);
p = testCase4;
F(p, s);
printSolutions(testCase4, ARRAYSIZE(testCase4));
printSolutions(testCase5, ARRAYSIZE(testCase5));
s = ARRAYSIZE(testCase5);
p = testCase5;
F(p, s);
printSolutions(testCase5, ARRAYSIZE(testCase5));
printSolutions(testCase6, ARRAYSIZE(testCase6));
s = ARRAYSIZE(testCase6);
p = testCase6;
F(p, s);
printSolutions(testCase6, ARRAYSIZE(testCase6));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIEFSUkFZU0laRSh4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKI2RlZmluZSBGKGEscykgd2hpbGUocy0tKSAqYT0qYT8qYSsrOiooYSsrLTEpCgp2b2lkIHByaW50U29sdXRpb25zKGludCAqIHNvbHV0aW9ucywgaW50IHNpemUpCnsKICBkbyB7CiAgICBwcmludGYoIiVkICIsICpzb2x1dGlvbnMrKyk7CiAgfSB3aGlsZSAoLS1zaXplID4gMCk7CiAgcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkKewogIHN0YXRpYyBpbnQgdGVzdENhc2UxW10gPSB7MSwgMCwgMiwgMCwgNywgNywgNywgMCwgNSwgMCwgMCwgMCwgOX07CiAgc3RhdGljIGludCB0ZXN0Q2FzZTJbXSA9IHsxLCAwLCAwLCAwLCAwLCAwfTsgCiAgc3RhdGljIGludCB0ZXN0Q2FzZTNbXSA9IHstMSwgMCwgNSwgMCwgMCwgLTd9OwogIHN0YXRpYyBpbnQgdGVzdENhc2U0W10gPSB7MjMsIDAsIDAsIC00MiwgMCwgMCwgMH07CiAgc3RhdGljIGludCB0ZXN0Q2FzZTVbXSA9IHsxLCAyLCAzLCA0fTsKICBzdGF0aWMgaW50IHRlc3RDYXNlNltdID0gey0xMjM0fTsKICBpbnQgKiBwOwogIGludCBzOwogIHByaW50U29sdXRpb25zKHRlc3RDYXNlMSwgQVJSQVlTSVpFKHRlc3RDYXNlMSkpOwogIHMgPSBBUlJBWVNJWkUodGVzdENhc2UxKTsKICBwID0gdGVzdENhc2UxOwogIEYocCwgcyk7CiAgcHJpbnRTb2x1dGlvbnModGVzdENhc2UxLCBBUlJBWVNJWkUodGVzdENhc2UxKSk7CiAgcHJpbnRTb2x1dGlvbnModGVzdENhc2UyLCBBUlJBWVNJWkUodGVzdENhc2UyKSk7CiAgcyA9IEFSUkFZU0laRSh0ZXN0Q2FzZTIpOwogIHAgPSB0ZXN0Q2FzZTI7CiAgRihwLCBzKTsKICBwcmludFNvbHV0aW9ucyh0ZXN0Q2FzZTIsIEFSUkFZU0laRSh0ZXN0Q2FzZTIpKTsKICBwcmludFNvbHV0aW9ucyh0ZXN0Q2FzZTMsIEFSUkFZU0laRSh0ZXN0Q2FzZTMpKTsKICBzID0gQVJSQVlTSVpFKHRlc3RDYXNlMyk7CiAgcCA9IHRlc3RDYXNlMzsKICBGKHAsIHMpOwogIHByaW50U29sdXRpb25zKHRlc3RDYXNlMywgQVJSQVlTSVpFKHRlc3RDYXNlMykpOwogIHByaW50U29sdXRpb25zKHRlc3RDYXNlNCwgQVJSQVlTSVpFKHRlc3RDYXNlNCkpOwogIHMgPSBBUlJBWVNJWkUodGVzdENhc2U0KTsKICBwID0gdGVzdENhc2U0OwogIEYocCwgcyk7CiAgcHJpbnRTb2x1dGlvbnModGVzdENhc2U0LCBBUlJBWVNJWkUodGVzdENhc2U0KSk7CiAgcHJpbnRTb2x1dGlvbnModGVzdENhc2U1LCBBUlJBWVNJWkUodGVzdENhc2U1KSk7CiAgcyA9IEFSUkFZU0laRSh0ZXN0Q2FzZTUpOwogIHAgPSB0ZXN0Q2FzZTU7CiAgRihwLCBzKTsKICBwcmludFNvbHV0aW9ucyh0ZXN0Q2FzZTUsIEFSUkFZU0laRSh0ZXN0Q2FzZTUpKTsKICBwcmludFNvbHV0aW9ucyh0ZXN0Q2FzZTYsIEFSUkFZU0laRSh0ZXN0Q2FzZTYpKTsKICBzID0gQVJSQVlTSVpFKHRlc3RDYXNlNik7CiAgcCA9IHRlc3RDYXNlNjsKICBGKHAsIHMpOwogIHByaW50U29sdXRpb25zKHRlc3RDYXNlNiwgQVJSQVlTSVpFKHRlc3RDYXNlNikpOwoKICByZXR1cm4gMDsKfQ==