#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
int vf,pmax,SIZE,size,sudoku[ 25 ] [ 25 ] ;
int isValid( int row,int col,int weight)
{
int i,j,start_row,start_col;
for ( i= 0 ; i< SIZE; i++ )
if ( sudoku[ row] [ i] == weight)
return 0 ;
for ( i= 0 ; i< SIZE; i++ )
if ( sudoku[ i] [ col] == weight)
return 0 ;
start_row= ( row/ size) * size;
start_col= ( col/ size) * size;
for ( i= start_row; i< start_row+ size; i++ )
for ( j= start_col; j< start_col+ size; j++ )
if ( sudoku[ i] [ j] == weight)
return 0 ;
return 1 ;
}
void printSolution( )
{
int i,j;
printf ( "\n " ) ;
for ( i= 0 ; i< SIZE; i++ )
{
for ( j= 0 ; j< SIZE; j++ )
printf ( "%d " ,sudoku[ i] [ j] ) ;
printf ( "\n " ) ;
}
printf ( "\n " ) ;
}
void solveSudoku( int row,int col)
{
int fd2,fd,i,cn,tmp= 0 ,rev,chn= 0 ,anss= 0 ;
//printf("hi ");
fd2= open( "tmp2" ,O_RDWR| O_CREAT) ;
flock( fd2,LOCK_EX) ;
read( fd2,& anss,sizeof ( anss) ) ;
printf ( "anss= %d\n " ,anss) ;
flock( fd2,LOCK_UN) ;
close( fd2) ;
if ( anss== 1 ) _exit( 1 ) ;
if ( row== SIZE && col== 0 )
{
//printf("aaa\n");
anss= 1 ;
fd2= open( "tmp2" ,O_RDWR| O_CREAT) ;
//flock(fd2,LOCK_EX);
write( fd2,& anss,sizeof ( anss) ) ;
printSolution( ) ;
flock( fd2,LOCK_UN) ;
close( fd2) ;
_exit( 1 ) ;
}
else
{
if ( sudoku[ row] [ col] ! = 0 ) //encounters a pre-filled cell.
{
if ( col== SIZE- 1 ) solveSudoku( row+ 1 ,0 ) ;
else solveSudoku( row,col+ 1 ) ;
}
else
for ( i= 1 ; i<= SIZE; i++ )
if ( isValid( row,col,i) && sudoku[ row] [ col] == 0 )
{
fd= open( "tmp" ,O_RDWR| O_CREAT) ;
flock( fd,LOCK_EX) ;
read( fd,& cn,sizeof ( cn) ) ;
printf ( "cn pre=%d\n " ,cn) ;
if ( cn= pmax)
{
sudoku[ row] [ col] = i;
printf ( "cn no fork=%d\n " ,cn) ;
flock( fd,LOCK_UN) ;
close( fd) ;
if ( col== SIZE- 1 ) solveSudoku( row+ 1 ,0 ) ;
else solveSudoku( row,col+ 1 ) ;
sudoku[ row] [ col] = 0 ;
//_exit(0);
}
else if ( cn< pmax && cn>= 0 )
{
cn++ ;
//flock(fd,LOCK_EX);
write( fd,& cn,4 ) ;
printf ( "cn after=%d\n " ,cn) ;
flock( fd,LOCK_UN) ;
close( fd) ;
pid_t cpid;
cpid= fork( ) ;
if ( cpid== - 1 )
{
sudoku[ row] [ col] = i;
if ( col== SIZE- 1 ) solveSudoku( row+ 1 ,0 ) ;
else solveSudoku( row,col+ 1 ) ;
sudoku[ row] [ col] = 0 ;
}
else
if ( cpid== 0 )
{
sudoku[ row] [ col] = i;
if ( col== SIZE- 1 ) solveSudoku( row+ 1 ,0 ) ;
else solveSudoku( row,col+ 1 ) ;
_exit( 0 ) ;
}
else
if ( cpid> 0 ) chn++ ;
} //cn<pmax
} //for all possible
{
//printf("chn=%d\n",chn);
while ( chn-- ) {
wait( & rev) ;
//if (rev>0) printf("rev%d\n",rev);
//if (tmp==1) _exit(1);
if ( WIFEXITED( rev) )
{
tmp= WEXITSTATUS( rev) ;
if ( tmp== 1 )
{
anss= 1 ;
_exit( 1 ) ;
//break;
}
else
if ( tmp== 0 )
{
printf ( "*" ) ;
fd= open( "tmp" ,O_RDWR| O_CREAT) ;
flock( fd,LOCK_EX) ;
read( fd,& cn,sizeof ( cn) ) ;
printf ( "cnp=%d" ,cn) ;
cn-- ;
write( fd,& cn,sizeof ( cn) ) ;
printf ( "cnaf=%d" ,cn) ;
flock( fd,LOCK_UN) ;
close( fd) ;
}
}
} //chn--
} //parent process
}
}
int main( int argc,char * argv[ ] )
{
int i,j,fd,fd2;
for ( i= 0 ; i<= 2 ; i++ )
{
j= 2 * i+ 1 ;
if ( strcmp ( argv[ j] ,"-m" ) == 0 )
{
if ( strcmp ( argv[ j+ 1 ] ,"vfork" ) == 0 ) vf= 1 ;
else vf= 0 ;
}
if ( strcmp ( argv[ j] ,"-n" ) == 0 )
{
SIZE= atoi ( argv[ j+ 1 ] ) ;
}
if ( strcmp ( argv[ j] ,"-p" ) == 0 )
{
pmax= atoi ( argv[ j+ 1 ] ) ;
}
}
printf ( "vf=%d " ,vf) ;
printf ( "pmax=%d " ,pmax) ;
printf ( "SIZE=%d\n " ,SIZE) ;
//scanf("%d",&SIZE);
size= SIZE; SIZE* = SIZE;
for ( i= 0 ; i< SIZE; i++ )
for ( j= 0 ; j< SIZE; j++ )
scanf ( "%d" ,& sudoku[ i] [ j] ) ;
printSolution( ) ; //Display inputted sudoku from the file
i= 0 ;
fd2= open( "tmp4" ,O_RDWR| O_CREAT) ;
//flock(fd2,LOCK_EX);
write( fd2,& i,4 ) ;
printf ( "tmp4=%d\n " ,i) ;
//flock(fd2,LOCK_UN);
//close(fd2);
//------------------
/*
fd=open("tmp",O_RDWR|O_CREAT);
flock(fd,LOCK_EX);
write(fd,&i,sizeof(i));
read(fd,&i,4);
read(fd,&j,4);
printf("tmp=%d %d\n",i,j);
flock(fd,LOCK_UN);
close(fd);
char buf[100];
fd=open("tmp",O_RDWR|O_CREAT);
flock(fd,LOCK_EX);
read(fd,buf,4);
printf("tmp=%s\n",buf);
flock(fd,LOCK_UN);
close(fd);
solveSudoku(0,0);*/
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxzeXMvd2FpdC5oPgojaW5jbHVkZSA8ZmNudGwuaD4KCgppbnQgdmYscG1heCxTSVpFLHNpemUsc3Vkb2t1WzI1XVsyNV07CgppbnQgaXNWYWxpZChpbnQgcm93LGludCBjb2wsaW50IHdlaWdodCkKewogICAgICAgIGludCBpLGosc3RhcnRfcm93LHN0YXJ0X2NvbDsKICAgICAgICBmb3IoaT0wO2k8U0laRTtpKyspCiAgICAgICAgICAgICAgICBpZihzdWRva3Vbcm93XVtpXT09d2VpZ2h0KQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKCiAgICAgICAgZm9yKGk9MDtpPFNJWkU7aSsrKQogICAgICAgICAgICAgICAgaWYoc3Vkb2t1W2ldW2NvbF09PXdlaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIHN0YXJ0X3Jvdz0ocm93L3NpemUpKnNpemU7CiAgICAgICAgc3RhcnRfY29sPShjb2wvc2l6ZSkqc2l6ZTsKICAgICAgICBmb3IoaT1zdGFydF9yb3c7aTxzdGFydF9yb3crc2l6ZTtpKyspCiAgICAgICAgICAgICAgICBmb3Ioaj1zdGFydF9jb2w7ajxzdGFydF9jb2wrc2l6ZTtqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN1ZG9rdVtpXVtqXT09d2VpZ2h0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHJldHVybiAxOwp9Cgp2b2lkIHByaW50U29sdXRpb24oKQp7CiAgICAgICAgaW50IGksajsKICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgZm9yKGk9MDtpPFNJWkU7aSsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGZvcihqPTA7ajxTSVpFO2orKykKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlZCAiLHN1ZG9rdVtpXVtqXSk7CiAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG4iKTsKfQoKdm9pZCBzb2x2ZVN1ZG9rdShpbnQgcm93LGludCBjb2wpCnsKICAgaW50IGZkMixmZCxpLGNuLHRtcD0wLHJldixjaG49MCxhbnNzPTA7CiAgIC8vcHJpbnRmKCJoaSAiKTsKICAgZmQyPW9wZW4oInRtcDIiLE9fUkRXUnxPX0NSRUFUKTsKICAgZmxvY2soZmQyLExPQ0tfRVgpOwogICByZWFkKGZkMiwmYW5zcyxzaXplb2YoYW5zcykpOwogICBwcmludGYoImFuc3M9ICAlZFxuIixhbnNzKTsKICAgZmxvY2soZmQyLExPQ0tfVU4pOwogICBjbG9zZShmZDIpOwogICBpZiAoYW5zcz09MSkgX2V4aXQoMSk7CiAgICAgICAgaWYocm93PT1TSVpFICYmIGNvbD09MCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvL3ByaW50ZigiYWFhXG4iKTsKICAgICAgICAgICAgICAgIGFuc3M9MTsKICAgICAgICAgICAgICAgIGZkMj1vcGVuKCJ0bXAyIixPX1JEV1J8T19DUkVBVCk7CiAgICAgICAgICAgICAgICAvL2Zsb2NrKGZkMixMT0NLX0VYKTsKICAgICAgICAgICAgICAgIHdyaXRlKGZkMiwmYW5zcyxzaXplb2YoYW5zcykpOwogICAgICAgICAgICAgICAgcHJpbnRTb2x1dGlvbigpOwogICAgICAgICAgICAgICAgZmxvY2soZmQyLExPQ0tfVU4pOwogICAgICAgICAgICAgICAgY2xvc2UoZmQyKTsKICAgICAgICAgICAgICAgIF9leGl0KDEpOwogICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYoc3Vkb2t1W3Jvd11bY29sXSE9MCkgICAgLy9lbmNvdW50ZXJzIGEgcHJlLWZpbGxlZCBjZWxsLgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sPT1TSVpFLTEpIHNvbHZlU3Vkb2t1KHJvdysxLDApOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBzb2x2ZVN1ZG9rdShyb3csY29sKzEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0xO2k8PVNJWkU7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBpc1ZhbGlkKHJvdyxjb2wsaSkgJiYgc3Vkb2t1W3Jvd11bY29sXT09MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZD1vcGVuKCJ0bXAiLE9fUkRXUnxPX0NSRUFUKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2NrKGZkLExPQ0tfRVgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZChmZCwmY24sc2l6ZW9mKGNuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImNuIHByZT0lZFxuIixjbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY249cG1heCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZG9rdVtyb3ddW2NvbF09aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiY24gbm8gZm9yaz0lZFxuIixjbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9jayhmZCxMT0NLX1VOKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbD09U0laRS0xKSBzb2x2ZVN1ZG9rdShyb3crMSwwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBzb2x2ZVN1ZG9rdShyb3csY29sKzEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vkb2t1W3Jvd11bY29sXT0wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9fZXhpdCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNuPHBtYXggJiYgY24+PTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mbG9jayhmZCxMT0NLX0VYKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKGZkLCZjbiw0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiY24gYWZ0ZXI9JWRcbiIsY24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvY2soZmQsTE9DS19VTik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBjcGlkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BpZD1mb3JrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3BpZD09LTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWRva3Vbcm93XVtjb2xdPWk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjb2w9PVNJWkUtMSkgc29sdmVTdWRva3Uocm93KzEsMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc29sdmVTdWRva3Uocm93LGNvbCsxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZG9rdVtyb3ddW2NvbF09MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3BpZD09MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZG9rdVtyb3ddW2NvbF09aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbD09U0laRS0xKSBzb2x2ZVN1ZG9rdShyb3crMSwwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBzb2x2ZVN1ZG9rdShyb3csY29sKzEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V4aXQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcGlkPjApIGNobisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS8vY248cG1heAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy9mb3IgYWxsIHBvc3NpYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiY2huPSVkXG4iLGNobik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShjaG4tLSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQoJnJldik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChyZXY+MCkgcHJpbnRmKCJyZXYlZFxuIixyZXYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAodG1wPT0xKSBfZXhpdCgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXSUZFWElURUQocmV2KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXA9V0VYSVRTVEFUVVMocmV2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wPT0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zcz0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXhpdCgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9icmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wPT0wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIioiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkPW9wZW4oInRtcCIsT19SRFdSfE9fQ1JFQVQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvY2soZmQsTE9DS19FWCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkKGZkLCZjbixzaXplb2YoY24pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiY25wPSVkIixjbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbi0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoZmQsJmNuLHNpemVvZihjbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJjbmFmPSVkIixjbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9jayhmZCxMT0NLX1VOKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ly9jaG4tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS8vcGFyZW50IHByb2Nlc3MKICAgICAgICB9Cn0KCmludCBtYWluKGludCBhcmdjLGNoYXIqIGFyZ3ZbXSkKewogICAgICAgIGludCBpLGosZmQsZmQyOwogICAgICAgIGZvciAoaT0wO2k8PTI7aSsrKQogICAgICAgIHsKICAgICAgICAgICAgaj0yKmkrMTsKICAgICAgICAgICAgaWYgKHN0cmNtcChhcmd2W2pdLCItbSIpPT0wKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHN0cmNtcChhcmd2W2orMV0sInZmb3JrIik9PTApIHZmPTE7CiAgICAgICAgICAgICAgICAgZWxzZSB2Zj0wOwogICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3RyY21wKGFyZ3Zbal0sIi1uIik9PTApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTSVpFPWF0b2koYXJndltqKzFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0cmNtcChhcmd2W2pdLCItcCIpPT0wKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcG1heD1hdG9pKGFyZ3ZbaisxXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByaW50ZigidmY9JWQgIix2Zik7CiAgICAgICAgcHJpbnRmKCJwbWF4PSVkICIscG1heCk7CiAgICAgICAgcHJpbnRmKCJTSVpFPSVkXG4iLFNJWkUpOwogICAgICAgIC8vc2NhbmYoIiVkIiwmU0laRSk7CiAgICAgICAgc2l6ZT1TSVpFOyAgU0laRSo9U0laRTsKICAgICAgICBmb3IgKGk9MDtpPFNJWkU7aSsrKQogICAgICAgICBmb3IgKGo9MDtqPFNJWkU7aisrKQogICAgICAgICAgIHNjYW5mKCIlZCIsJnN1ZG9rdVtpXVtqXSk7CiAgICAgICAgICBwcmludFNvbHV0aW9uKCk7ICAvL0Rpc3BsYXkgaW5wdXR0ZWQgc3Vkb2t1IGZyb20gdGhlIGZpbGUKCgogICAgICAgIGk9MDsKICAgICAgICBmZDI9b3BlbigidG1wNCIsT19SRFdSfE9fQ1JFQVQpOwogICAgICAgIC8vZmxvY2soZmQyLExPQ0tfRVgpOwogICAgICAgIHdyaXRlKGZkMiwmaSw0KTsKICAgICAgICBwcmludGYoInRtcDQ9JWRcbiIsaSk7CiAgICAgICAgLy9mbG9jayhmZDIsTE9DS19VTik7CiAgICAgICAgLy9jbG9zZShmZDIpOwovLy0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIC8qCiAgICAgICAgZmQ9b3BlbigidG1wIixPX1JEV1J8T19DUkVBVCk7CiAgICAgICAgZmxvY2soZmQsTE9DS19FWCk7CiAgICAgICAgd3JpdGUoZmQsJmksc2l6ZW9mKGkpKTsKICAgICAgICByZWFkKGZkLCZpLDQpOwogICAgICAgIHJlYWQoZmQsJmosNCk7CiAgICAgICAgcHJpbnRmKCJ0bXA9JWQgJWRcbiIsaSxqKTsKICAgICAgICBmbG9jayhmZCxMT0NLX1VOKTsKICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgY2hhciBidWZbMTAwXTsKICAgICAgICBmZD1vcGVuKCJ0bXAiLE9fUkRXUnxPX0NSRUFUKTsKICAgICAgICBmbG9jayhmZCxMT0NLX0VYKTsKICAgICAgICByZWFkKGZkLGJ1Ziw0KTsKICAgICAgICBwcmludGYoInRtcD0lc1xuIixidWYpOwogICAgICAgIGZsb2NrKGZkLExPQ0tfVU4pOwogICAgICAgIGNsb3NlKGZkKTsKCiAgICAgICAgc29sdmVTdWRva3UoMCwwKTsqLwogICAgICAgIHJldHVybiAwOwp9Cg==
compilation info
prog.cpp: In function ‘void solveSudoku(int, int)’:
prog.cpp:51: error: no matching function for call to ‘flock::flock(int&, int)’
/usr/include/bits/fcntl.h:145: note: candidates are: flock::flock()
/usr/include/bits/fcntl.h:145: note: flock::flock(const flock&)
prog.cpp:54: error: no matching function for call to ‘flock::flock(int&, int)’
/usr/include/bits/fcntl.h:145: note: candidates are: flock::flock()
/usr/include/bits/fcntl.h:145: note: flock::flock(const flock&)
prog.cpp:65: error: no matching function for call to ‘flock::flock(int&, int)’
/usr/include/bits/fcntl.h:145: note: candidates are: flock::flock()
/usr/include/bits/fcntl.h:145: note: flock::flock(const flock&)
prog.cpp:81: error: no matching function for call to ‘flock::flock(int&, int)’
/usr/include/bits/fcntl.h:145: note: candidates are: flock::flock()
/usr/include/bits/fcntl.h:145: note: flock::flock(const flock&)
prog.cpp:84: warning: suggest parentheses around assignment used as truth value
prog.cpp:88: error: no matching function for call to ‘flock::flock(int&, int)’
/usr/include/bits/fcntl.h:145: note: candidates are: flock::flock()
/usr/include/bits/fcntl.h:145: note: flock::flock(const flock&)
prog.cpp:101: error: no matching function for call to ‘flock::flock(int&, int)’
/usr/include/bits/fcntl.h:145: note: candidates are: flock::flock()
/usr/include/bits/fcntl.h:145: note: flock::flock(const flock&)
prog.cpp:144: error: no matching function for call to ‘flock::flock(int&, int)’
/usr/include/bits/fcntl.h:145: note: candidates are: flock::flock()
/usr/include/bits/fcntl.h:145: note: flock::flock(const flock&)
prog.cpp:150: error: no matching function for call to ‘flock::flock(int&, int)’
/usr/include/bits/fcntl.h:145: note: candidates are: flock::flock()
/usr/include/bits/fcntl.h:145: note: flock::flock(const flock&)
prog.cpp:52: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’, declared with attribute warn_unused_result
prog.cpp:63: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result
prog.cpp:82: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’, declared with attribute warn_unused_result
prog.cpp:99: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result
prog.cpp:145: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’, declared with attribute warn_unused_result
prog.cpp:148: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result
prog.cpp: In function ‘int main(int, char**)’:
prog.cpp:161: warning: unused variable ‘fd’
prog.cpp:186: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
prog.cpp:193: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result
stdout