Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	scanner.Split(bufio.ScanWords)
	scanner.Scan()
	table := [9][9]int{}
	check := [9][9]bool{}
	n, _ := strconv.Atoi(scanner.Text())
	for n > 0 {
		n--
		for i := 0; i < 9; i++ {
			for j := 0; j < 9; j++ {
				table[i][j] = nextInt()
			}
		}
		for i := 0; i < 9; i++ {
			for j := 0; j < 9; j++ {
				ok := true
				for k := 0; k < 9; k++ {
					if table[i][j] == table[i][k] && j != k {
						ok = false
					}
				}
				for k := 0; k < 9; k++ {
					if table[i][j] == table[k][j] && i != k {
						ok = false
					}
				}
				seci := i / 3
				secj := j / 3
				for k := 0; k < 3; k++ {
					for l := 0; l > 3; l++ {
						if table[seci*3+k][secj*3+l] == table[i][j] && seci*3+k != i && secj*3+l != j {
							ok = false
						}
					}
				}
				if !ok {
					check[i][j] = true
				}
			}
		}
		for i := 0; i < 9; i++ {
			for j := 0; j < 9; j++ {
				if check[i][j] {
					fmt.Print("*")
				} else {
					fmt.Print(" ")
				}
				fmt.Print(table[i][j])
			}
			fmt.Println()
		}
		if n != 0 {
			fmt.Println()
		}
	}
}

func nextInt() int {
	scanner.Scan()
	i, e := strconv.Atoi(scanner.Text())
	if e != nil {
		panic(e)
	}
	return i
}

C++: #include<iostream>
#include<cstring>
using namespace std;


int a[9][9];
bool f[9][9];


int main(){
	int n;
	cin>>n;
	while(n--){
		for(int i=0;i<9;i++){
			for(int j=0;j<9;j++){
				cin>>a[i][j];
				f[i][j]=false;
			}
		}
		int c[10];
		for(int i=0;i<9;i++){
			memset(c,0,sizeof(c));
			for(int j=0;j<9;j++){
				c[a[i][j]]++;
			}
			for(int j=0;j<9;j++){
				if(1<c[a[i][j]])f[i][j]=true;
			}
		}
		for(int j=0;j<9;j++){
			memset(c,0,sizeof(c));
			for(int i=0;i<9;i++){
				c[a[i][j]]++;
			}
			for(int i=0;i<9;i++){
				if(1<c[a[i][j]])f[i][j]=true;
			}
		}
		for(int y=0;y<9;y+=3)for(int x=0;x<9;x+=3){
			memset(c,0,sizeof(c));
			for(int i=0;i<3;i++)for(int j=0;j<3;j++){
				c[a[y+i][x+j]]++;
			}
			for(int i=0;i<3;i++)for(int j=0;j<3;j++){
				if(1<c[a[y+i][x+j]])f[y+i][x+j]=true;
			}
		}
		for(int i=0;i<9;i++){
			for(int j=0;j<9;j++){
				if(f[i][j])cout<<'*';
				else cout<<' ';
				cout<<a[i][j];
			}
			cout<<endl;
		}
		if(n)cout<<endl;
	}
	return 0;
}

C++: #include<iostream>
#define loop(i,a,b) for(int i=a;i<b;i++)
#define rep(i,a) loop(i,0,a)
using namespace std;

int main(){
  int n;
  cin>>n;
  rep(a,n){
    int dt[10][10];
    int checkline[10][10];
    int checkrow[10][10];
    rep(i,10){
      rep(j,10){
	checkline[i][j]=0;
	checkrow[i][j]=0;
      }
    }
    loop(i,1,10){
      loop(j,1,10){
	cin>>dt[i][j];
	checkline[i][dt[i][j]]++;//横ライン見てる
	checkrow[j][dt[i][j]]++;//縦ライン見てる
      }
    }
    //cout<<checkrow[1][2]<<endl;
    //cout<<checkrow[2][1]<<endl;
    bool error[10][10];
    rep(i,10)rep(j,10)error[i][j]=false;
    rep(i,10){
      rep(j,10){
	if(checkline[i][j]>1){
	  rep(k,10){
	    if(dt[i][k]==j)error[i][k]=true;
	  }
	}
      }
    }
    rep(j,10){
      rep(i,10){
	if(checkrow[j][i]>1){
	  // if(j==2 && i==1)cout<<"afaefea"<<endl;
	  //if(i==1 && j==2)cout<<"qqqqqqqq"<<endl;
	  rep(k,10){
	    if(dt[k][j]==i)error[k][j]=true;
	  }
	}
      }
    }
    int circle[4][4][10];
    rep(i,4)rep(j,4)rep(k,10)circle[i][j][k]=0;
    loop(i,1,4){
      loop(j,1,4){
	for(int k=(i-1)*3+1;k<(i-1)*3+4;k++){
	  for(int l=(j-1)*3+1;l<(j-1)*3+4;l++){
	    circle[i][j][dt[k][l]]++;
	  }
	}
	for(int k=1;k<10;k++){
	  if(circle[i][j][k]>1){
	    for(int l=(i-1)*3+1;l<(i-1)*3+4;l++){
	      for(int m=(j-1)*3+1;m<(j-1)*3+4;m++){
		if(dt[l][m]==k)error[l][m]=true;
	      }
	    }
	  }
	}
      }
    }
    rep(i,10){
      rep(j,10){
	if(i==0 || j==0)continue;
	if(error[i][j])cout<<"*"<<dt[i][j];
	else cout<<" "<<dt[i][j];
      }
      cout<<endl;
    }
    cout<<endl;
  }
  return 0;
}

C++: #include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
    int n;
    bool flag=false;
    scanf("%d",&n);
    while(n--){
        if(flag)puts("");
        else flag=true;
        int fld[9][9];
        for(int i=0;i<9;i++)for(int j=0;j<9;j++)scanf("%d",&fld[i][j]);

        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                bool flag=true;
                for(int k=0;k<9;k++){
                    if(i!=k)flag&=(fld[k][j]!=fld[i][j]);
                    if(j!=k)flag&=(fld[i][k]!=fld[i][j]);
                }
                int y=i/3*3,x=j/3*3;
                for(int k=0;k<9;k++){
                    if(y+k/3!=i||x+k%3!=j)
                        flag&=(fld[y+k/3][x+k%3]!=fld[i][j]);
                }
                if(flag)printf(" ");
                else printf("*");
                printf("%d",fld[i][j]);
            }
            puts("");
        }
    }
}

C++: #include <iostream>

using namespace std;

int p[9][9];

int he(int, int);
int le(int, int);
int sq(int, int);

int main() {

	int n;

	cin >> n;
	for(int c=0; c<n; c++) {
		if(c) {
			cout << endl;
		}
		for(int i=0; i<9; i++) {
			for(int j=0; j<9; j++) {
				cin >> p[i][j];
			}
		}
							
		for(int i=0; i<9; i++) {
			for(int j=0; j<9; j++) {
				cout << ((he(i, j)||le(i, j)||sq(i, j)) ? "*" : " ") << p[i][j];
			}
			cout << endl;
		}
	}

	return 0;

}


int he(int i, int j) {

	int f=0;

	for(int k=0; k<9; k++) {
		if(p[i][j]==p[k][j]&&!(i==k)) {
			f++;
		}
	}
	return (f ? 1 : 0);

}


int le(int i, int j) {

	int f=0;

	for(int l=0; l<9; l++) {
		if(p[i][j]==p[i][l]&&!(j==l)) {
			f++;
		}
	}
	return (f ? 1 : 0);

}


int sq(int i, int j) {

	int f=0, x=(i/3)*3, y=(j/3)*3;

	for(int k=x; k<x+3; k++) {
		for(int l=y; l<y+3; l++) {
			if(p[i][j]==p[k][l]&&!(i==k&&j==l)) {
				f++;
			}
		}
	}
	return (f ? 1 : 0);

}

C++: #include <bits/stdc++.h>
#define rep(i,l,n) for(int i=l;i<n;i++)
#define rer(i,l,n) for(int i=l;i<=n;i++)
#define all(a) a.begin(),a.end()
#define o(a) cout<<a<<endl
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef vector<int> vint;
typedef pair<int,int> pii;

int main(){
	int n;
	cin>>n;
	rep(i,0,n){
		if(i) cout<<endl;
		int data[9][9]={},error[9][9]={};
		rep(j,0,9) rep(k,0,9) cin>>data[j][k];
		rep(j,0,9){
			int count[9]={};
			rep(k,0,9) count[data[j][k]-1]++;
			rep(k,0,9){
				if(count[data[j][k]-1]>1) error[j][k]=1;

			}
		}rep(j,0,9){
			int count[9]={};
			rep(k,0,9) count[data[k][j]-1]++;
			rep(k,0,9){
				if(count[data[k][j]-1]>1) error[k][j]=1;
			}
		}rep(j,0,3)rep(k,0,3){
			int count[9]={};
			rep(l,0,3)rep(m,0,3) count[data[3*j+l][3*k+m]-1]++;
			rep(l,0,3)rep(m,0,3){
				if(count[data[3*j+l][3*k+m]-1]>1) error[3*j+l][3*k+m]=1;
			}
		}rep(j,0,9){
			rep(k,0,9){
				if(error[j][k]) cout<<"*";
				else cout<<" ";
				cout<<data[j][k];
			}
			cout<<endl;
		}
	}
}

C++: #include<stdio.h>

int main(void){
	int n,i,j,k=0;
	int joudan[5],gedan[5];
	int data[7][5];

	while(1){
		
		if(scanf("%d",&n)==EOF)break;
		for(i=0;i<7;i++)
			for(j=0;j<5;j++)
				data[i][j]=1;

		for(i=4;i>=0;i--){
			joudan[i]=(n%10)/5;
			gedan[i]=(n%10)%5;
			n/=10;
		}
		  for(i=0;i<5;i++){//上段の判定
			  if(joudan[i]==1)
				  data[0][i]=0;
			  else 
				  data[1][i]=0;
		  }

		 for(i=0;i<5;i++){//下段の判定
			  if(gedan[i]==0)
				 data[2][i]=0;
			  else if(gedan[i]==1)
				  data[3][i]=0;
			  else if(gedan[i]==2)
				  data[4][i]=0;
			  else if(gedan[i]==3)
				  data[5][i]=0;
			  else if(gedan[i]==4)
				  data[6][i]=0;
		  }
		for(i=0;i<2;i++)
			for(j=0;j<5;j++){
				if(data[i][j]==1)
					printf("*");
				else
					printf(" ");
				if(j==4) printf("\n");
			}

		for(i=0;i<5;i++){
			printf("=");
			if(i==4) printf("\n");
		}

		for(i=2;i<7;i++)
			for(j=0;j<5;j++){
				if(data[i][j]==1)
					printf("*");
				else
					printf(" ");
				if(j==4&&i!=6) printf("\n");
			}
			puts("");
	}
	return 0;
}