#define assert(p) { if(!p) { printf("Line %d: False assertion!\n",__LINE__); return 0; } }
#define trace { printf("Line %d: Reached\n",__LINE__); }
#include<stdio.h>
bool imp(bool p,bool q) { return (p?q:true); }
void input(bool &p) { int t; scanf("%d",&t); p=t; }
int main()
{
bool a,b;
input(a); input(b);
trace;
if( !b && imp(a,b) )
{
trace;
if( a )
{
trace;
assert(a);
assert(imp(a,b));
assert(b);
assert(!b);
assert(false);
}
assert(!a);
}
assert(!a); // Invalid, unlike the above assertions. Find an input that fails it!