Go: package main

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

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	table := [][]int{ // abcdefgの順番の
	{1,1,1,1,1,1,0}, // 1
	{0,1,1,0,0,0,0}, // 2
	{1,1,0,1,1,0,1}, // 3
	{1,1,1,1,0,0,1}, // 4
	{0,1,1,0,0,1,1}, // 5
	{1,0,1,1,0,1,1}, // 6
	{1,0,1,1,1,1,1}, // 7
	{1,1,1,0,0,1,0}, // 8
	{1,1,1,1,1,1,1}, // 9
	{1,1,1,1,0,1,1}, // 10
	}
	for scanner.Scan() {
		n, _ := strconv.Atoi(scanner.Text())
		if n == -1 {
			break
		}
		initial := []int{0,0,0,0,0,0,0}
		for i := 0; i < n; i++ {
			scanner.Scan()
			d, _ := strconv.Atoi(scanner.Text())
			for j := 6; j >= 0; j-- {
				fmt.Printf("%d", initial[j]^table[d][j])
				initial[j] = table[d][j]
			}
			fmt.Println()
		}
	}
}

C++: #include<iostream>
#include<sstream>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<algorithm>
#include<numeric>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<cassert>

#define rep(i,n) for(int i=0;i<n;i++)
#define all(c) (c).begin(),(c).end()
#define mp make_pair
#define pb push_back
#define rp(i,c) rep(i,(c).size())
#define fr(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define dbg(x) cerr<<#x<<" = "<<(x)<<endl

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pi;
const int inf=1<<28;
const double INF=1e12,EPS=1e-9;

bool seg[][7]={
	{0,1,1,1,1,1,1},
	{0,0,0,0,1,1,0},
	{1,0,1,1,0,1,1},
	{1,0,0,1,1,1,1},
	{1,1,0,0,1,1,0},
	
	{1,1,0,1,1,0,1},
	{1,1,1,1,1,0,1},
	{0,1,0,0,1,1,1},
	{1,1,1,1,1,1,1},
	{1,1,0,1,1,1,1}
};

int main()
{
	int n,t; bool st[7];
	while(cin>>n,~n){
		rep(i,7)st[i]=0;
		rep(i,n){
			cin>>t;
			char ans[8]={0};
			rep(i,7){
				ans[i]=st[i]^seg[t][i]?'1':'0';
				st[i]=seg[t][i];
			}
			cout<<ans<<endl;
		}
	}
	
	return 0;
}

C++: #include<stdio.h>

int main(void)
{
 	int kazu_N,kazu_M;
	int cut_i,cut_j;
	int ans[7];
	int num[10][7]={
		{0,1,1,1,1,1,1},
		{0,0,0,0,1,1,0},
		{1,0,1,1,0,1,1},
		{1,0,0,1,1,1,1},
		{1,1,0,0,1,1,0},
		{1,1,0,1,1,0,1},
		{1,1,1,1,1,0,1},
		{0,1,0,0,1,1,1},
		{1,1,1,1,1,1,1},
		{1,1,0,1,1,1,1}};

	while(1){
		scanf("%d",&kazu_N);
		int now[7]={0,0,0,0,0,0,0};		
		
		if(kazu_N==-1){
			break;
		}
		
		for(cut_i=0;cut_i<kazu_N;cut_i++){
			scanf("%d",&kazu_M);
			for(cut_j=0;cut_j<7;cut_j++){
				if(num[kazu_M][cut_j]!=now[cut_j]){
					ans[cut_j]=1;
				}
				else {
					ans[cut_j]=0;
				}
				now[cut_j]=num[kazu_M][cut_j];
			}
			for(cut_j=0;cut_j<7;cut_j++){
				printf("%d",ans[cut_j]);
				if(cut_j==6){
					printf("\n");
				}
			}
		}
	}
	return 0;
}

C++: #include <iostream>
#include <vector>

using namespace std;
int main(void){
  int n;
  int l[7] = {0};
  int d[10][7] = {
    {1,1,1,1,1,1,0}, // 0
    {0,1,1,0,0,0,0}, // 1
    {1,1,0,1,1,0,1}, // 2 
    {1,1,1,1,0,0,1}, // 3
    {0,1,1,0,0,1,1}, // 4
    {1,0,1,1,0,1,1}, // 5
    {1,0,1,1,1,1,1}, // 6
    {1,1,1,0,0,1,0}, // 7
    {1,1,1,1,1,1,1}, // 8
    {1,1,1,1,0,1,1}  // 9
  };
  while(cin>>n,n>=0){
    while(n--){
      int num;
      cin>>num;
      for(int i = 6 ; i >= 0 ; i --){
	cout<<(l[i]==d[num][i]?0:1);
	l[i]=d[num][i];
      }
      cout<<endl;
    }
  }
}

C++: #include<stdio.h>

char *ans[10];
int n, p, i;
int main(){
    ans[0] = "1111110";
    ans[1] = "0110000";
    ans[2] = "1101101";
    ans[3] = "1111001";
    ans[4] = "0110011";
    ans[5] = "1011011";
    ans[6] = "1011111";
    ans[7] = "1110010";
    ans[8] = "1111111";
    ans[9] = "1111011";
    while(scanf("%d", &n),~n){
	char *now = "00000000";
	while(n--){
	    scanf("%d", &p);
	    for(i = 6;i >= 0;i--){
		printf("%d", !(ans[p][i] == now[i]));
	    }
	    puts("");
	    now = ans[p];
	}
    }
    return 0;
}

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


int main(){
    bool segment[10][7] = {
        {true, true, true, true, true, true, false},
        {false, true, true, false, false, false, false},
        {true, true, false, true, true, false, true},
        {true, true, true, true, false, false, true},
        {false, true, true, false, false, true, true},
        {true, false, true, true, false, true, true},
        {true, false, true, true, true, true ,true},
        {true, true, true, false, false, true, false},
        {true, true, true, true, true, true, true},
        {true, true, true, true, false, true, true} };

    bool result[7];
    int n;
    while(cin >> n, n != -1){
        bool prev[7] = {false, false, false, false, false, false, false};
        for(int i=1; i<=n; i++){
            int digit;
            cin >> digit;
            for(int j=0; j<7; j++){
                if(prev[j] xor segment[digit][j]){
                    result[j] = true;
                }else{
                    result[j] = false;
                }
            }
            for(int j=6; j>=0; j--){
                if(result[j]){
                    cout << "1";
                }else{
                    cout << "0";
                }
            }
            cout << endl;

            for(int j=0; j<7; j++){
                prev[j] = segment[digit][j];
            }
        }
    }
    return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    vector<string> str(10);
    str[0] = "0111111";
    str[1] = "0000110";
    str[2] = "1011011";
    str[3] = "1001111";
    str[4] = "1100110";
    str[5] = "1101101";
    str[6] = "1111101";
    str[7] = "0100111";
    str[8] = "1111111";
    str[9] = "1101111";

    while (cin >> N, N != -1) {
        int s;
        string start = "0000000";
        while (N--) {
            cin >> s;
            for (int i = 0; i < 7; i++) {
                if (str[s][i] == '1') {
                    if (start[i] == '1') cout << '0';
                    else cout << '1';
                } else {
                    if (start[i] == '0') cout << '0';
                    else cout << '1';
                }
            }
            cout << endl;
            start = str[s];
        }
    }

    return 0;
}

C++: #include<stdio.h>



int main(){
int N,x;
int A[8]={0,0,0,0,0,0,0};
int n[8]={0,0,0,0,0,0,0};
int n0[8]={0,1,1,1,1,1,1};
int n1[8]={0,0,0,0,1,1,0};
int n2[8]={1,0,1,1,0,1,1};
int n3[8]={1,0,0,1,1,1,1};
int n4[8]={1,1,0,0,1,1,0};
int n5[8]={1,1,0,1,1,0,1};
int n6[8]={1,1,1,1,1,0,1};
int n7[8]={0,1,0,0,1,1,1};
int n8[8]={1,1,1,1,1,1,1};
int n9[8]={1,1,0,1,1,1,1};

while(1){
scanf("%d",&N);if(N==-1)break;
for(int i=0;i<7;i++)
A[i]=0;

for(int i=0;i<N;i++)
{
scanf("%d",&x);
switch(x){

case 0:
for(int i=0;i<7;i++)
n[i]=n0[i];
break;

case 1:
for(int i=0;i<7;i++)
n[i]=n1[i];
break;

case 2:
for(int i=0;i<7;i++)
n[i]=n2[i];
break;

case 3:
for(int i=0;i<7;i++)
n[i]=n3[i];
break;

case 4:
for(int i=0;i<7;i++)
n[i]=n4[i];
break;

case 5:
for(int i=0;i<7;i++)
n[i]=n5[i];
break;

case 6:
for(int i=0;i<7;i++)
n[i]=n6[i];
break;

case 7:
for(int i=0;i<7;i++)
n[i]=n7[i];
break;

case 8:
for(int i=0;i<7;i++)
n[i]=n8[i];
break;

case 9:
for(int i=0;i<7;i++)
n[i]=n9[i];
break;
}
for(int i=0;i<7;i++)
{if(A[i]!=n[i])printf("1");
else if(A[i]==n[i])printf("0");
A[i]=n[i];
}
printf("\n");
}
}
return 0;
}

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

int main(){
  int n ,num;
  string seg="0000000"; // a b c d e f g の順
  string set[10]={ /* 各数字のビット */
    "0111111", // 0
    "0000110", // 1
    "1011011", // 2
    "1001111", // 3
    "1100110", // 4
    "1101101", // 5
    "1111101", // 6
    "0100111", // 7
    "1111111", // 8
    "1101111"  // 9
  };

  while( true ){ // -1まで
    cin >> n;
    if( n == -1 ){
      break;
    }

    for( int i=0 ; i<n ; i++ ){
      cin >> num;
      for( int j=0 ; j<7 ; j++ ){
	if( seg[j] != set[num][j] ){ // ビットが違ったら
	  cout << '1';
	}
	else{ // 同じなら
	  cout << '0' ;
	}
      }
      seg = set[num];
      cout << endl;
    }

    seg = "0000000"; // セグメントを0のに初期化
  }
}