Go: package main

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

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	scanner.Split(bufio.ScanWords)
	for 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++: #define _crt_secure_no_warnings

#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>

#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif


#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>

#ifdef __GXX_EXPERIMENTAL_CXX0X__
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif


using namespace std;

int main()
{
	int N;
	cin >> N;
	for (size_t i = 0; i < N; i++)
	{
		int data[9][9];
		bool ans[9][9] = {};
		for (size_t i = 0; i < 9; i++)
		{
			for (size_t j = 0; j < 9; j++)
			{
				cin >> data[i][j];
				data[i][j]--;
			}
		}
		for (size_t i = 0; i < 9; i++)
		{
			int a[9] = {}, b[9] = {};
			for (size_t j = 0; j < 9; j++)
			{
				a[data[i][j]]++;
				b[data[j][i]]++;
			}
			for (size_t j = 0; j < 9; j++)
			{
				if (a[j] != 1)
				{
					for (size_t k = 0; k < 9; k++)
					{
						if (data[i][k] == j)
						{
							ans[i][k] = 1;
						}
					}
				}
				if (b[j] != 1)
				{
					for (size_t k = 0; k < 9; k++)
					{
						if (data[k][i] == j)
						{
							ans[k][i] = 1;
						}
					}
				}
			}
		}
		for (size_t i = 0; i < 3; i++)
		{
			for (size_t j = 0; j < 3; j++)
			{
				int c[9] = {};
				for (size_t k = 0; k < 3; k++)
				{
					for (size_t l = 0; l < 3; l++)
					{
						c[data[i * 3 + k][j * 3 + l]]++;
					}
				}
				for (size_t k = 0; k < 9; k++)
				{
					if (c[k] != 1)
					{
						for (size_t l = 0; l < 3; l++)
						{
							for (size_t m = 0; m < 3; m++)
							{
								if (data[i * 3 + l][j * 3 + m] == k)
								{
									ans[i * 3 + l][j * 3 + m] = 1;
								}
							}
						}
					}
				}
			}
		}
		for (size_t i = 0; i < 9; i++)
		{
			for (size_t j = 0; j < 9; j++)
			{
				cout << (ans[i][j] ? "*" : " ") << data[i][j] + 1;
			}
			cout << endl;
		}
		if (i != N - 1)
		{
			cout << endl;
		}
	}
	return 0;
}

C++: #include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<cctype>
#include<complex>
#include<iostream>
#include<sstream>
#include<algorithm>
#include<functional>
#include<vector>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<numeric>
#define INF 1e+8
#define EPS 1e-8
#define PB push_back
#define fi first
#define se second
#define reps(i,j,k) for(int i = j; i < k; i++)
#define rep(i,j) reps(i,0,j)
using namespace std;
const int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
typedef long long ll;
typedef pair<int,int> Pii;

int main(){
	int N;
	scanf("%d",&N);
	const int hoge = N;
	rep(n,hoge){
		int field[10][10];
		bool fail[10][10]={{0}};
		rep(i,9){
			rep(j,9){
				scanf("%d",&field[i][j]);
			}
		}
		//よこ
		rep(i,9){
			int cnt[9]={0};
			rep(j,9){
				cnt[field[i][j]]++;
			}
			rep(j,9){
				if(cnt[j]>1){
					rep(k,9){
						if(field[i][k]==j)fail[i][k]++;
					}
				}
			}
		}
		//たて
		rep(i,9){
			int cnt[9]={0};
			rep(j,9){
				cnt[field[j][i]]++;
			}
			rep(j,9){
				if(cnt[j]>1){
					rep(k,9){
						if(field[k][i]==j)fail[k][i]++;
					}
				}
			}
		}
		//わく
		for(int i = 0; i < 9;i+=3){
			for(int j = 0; j < 9; j+=3){
				int cnt[9]={0};
				reps(k,i,i+3){
					reps(l,j,j+3){
						cnt[field[k][l]]++;
					}
				}
				rep(m,9){
					if(cnt[m]>1){
						reps(k,i,i+3){
							reps(l,j,j+3){
								if(field[k][l] == m)fail[k][l]++;
							}
						}
					}
				}
			}
		}
		rep(i,9){
			rep(j,9){
				printf("%c%d",fail[i][j]==1?'*':' ',field[i][j]);
			}
			puts("");
		}
		n == hoge-1?printf(""):puts("");
	}
	return 0;
}

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

// 9*9 ÌpYÌóÔð\·
int m[81];
// (x,y)ªÔá¦Ä¢éÌÆ« d[y*9+x] = 1
int d[81];

void solve(){
	// ú»
	for(int i=0 ; i < 81 ; i++ ){
		d[i] = 0;
	}
	
	for(int y=0 ; y < 9 ; y++ ){
		// f[i] :=  i ªo»µ½ñ
		int f[10] = {0};
		for(int x=0 ; x < 9 ; x++ ){
			int i = y * 9 + x;
			f[ m[i] ]++;
		}
		for(int x=0 ; x < 9 ; x++ ){
			int i = y * 9 + x;
			if( f[ m[i] ] >= 2 ){
				d[i] = 1;
			}
		}
	}
	for(int x=0 ; x < 9 ; x++ ){
		// f[i] :=  i ªo»µ½ñ
		int f[10] = {0};
		for(int y=0 ; y < 9 ; y++ ){
			int i = y * 9 + x;
			f[ m[i] ]++;
		}
		for(int y=0 ; y < 9 ; y++ ){
			int i = y * 9 + x;
			if( f[ m[i] ] >= 2 ){
				d[i] = 1;
			}
		}
	}
	for(int i=0 ; i < 9 ; i++ ){
		// f[i] :=  i ªo»µ½ñ
		int f[10] = {0};
		int a[9] = {0,3,6,27,30,33,54,57,60};
		int b[9] = {0,1,2,9,10,11,18,19,20};
		for(int j=0 ; j < 9 ; j++ ){
			int k = a[i] + b[j];
			f[ m[k] ]++;
		}
		for(int j=0 ; j < 9 ; j++ ){
			int k = a[i] + b[j];
			if( f[ m[k] ] >= 2 ){
				d[k] = 1;
			}
		}
	}
}

int main(){
	int n;
	cin >> n;
	for(int t=0 ; t < n  ; t++ ){
		for(int i=0 ; i < 81 ; i++ ){
			cin >> m[i];
		}
		
		if( t != 0 ){
			cout << endl;
		}
		solve();
		for(int y=0 ; y < 9 ; y++ ){
			for(int x=0 ; x < 9 ; x++ ){
				int i = y * 9 + x;
				char c;
				c = (d[i])? '*' : ' ';
				cout << c << m[i];
			}
			cout << endl;
		}
	}
}