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 <algorithm>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <cmath>

static const int MOD = 1000000007;
using ll = long long;
using u32 = unsigned;
using u64 = unsigned long long;
using namespace std;

template<class T> constexpr T INF = ::numeric_limits<T>::max()/32*15+208;


template <class T>
ostream& operator<<(ostream& os, vector<T> v) {
    os << "{";
    for (int i = 0; i < v.size(); ++i) {
        if(i) os << ", ";
        os << v[i];
    }
    return os << "}";
}

template <class L, class R>
ostream& operator<<(ostream& os, pair<L, R> p) {
    return os << "{" << p.first << ", " << p.second << "}";
}


int main() {
    vector<int> v = {63, 6, 91, 79, 102, 109, 125, 39, 127, 111, 0};
    int n;
    while(cin >> n, ~n){
        vector<int> a(n+1, 10);
        for (int i = 0; i < n; ++i) {
            cin >> a[i+1];
            cout << bitset<7>(v[a[i+1]]^v[a[i]]) << "\n";
        }
    }
    return 0;
}

C++: #include <functional>
#include <algorithm>
#include <iostream>
#include <numeric>
#include <iomanip>
#include <utility>
#include <cstdlib>
#include <sstream>
#include <bitset>
#include <vector>
#include <cstdio>
#include <ctime>
#include <queue>
#include <deque>
#include <cmath>
#include <stack>
#include <list>
#include <map>
#include <set>

using namespace std;

typedef vector<int> vi;
typedef pair<int,int> pii;
typedef long long ll;

#define dump(x)  cerr << #x << " = " << (x) << endl
#define rep(i,n) for(int i=0;i<(n);i++)
#define all(a)  (a).begin(),(a).end()
#define pb push_back


int main() {
    int n;
    string num[]={
        "0111111",  //0
        "0000110",  //1
        "1011011",  //2
        "1001111",  //3
        "1100110",  //4
        "1101101",  //5
        "1111101",  //6
        "0100111",  //7
        "1111111",  //8
        "1101111"   //9
    };
    
    while(cin>>n){
        if(n==-1)break;
        
        string now="0000000";
        
        rep(i,n){
            int a;
            cin>>a;
            rep(i,7){
                if(now[i]!=num[a][i])cout<<"1";
                else cout<<"0";
            }
            cout<<endl;
            now=num[a];

        }
        
    }
    return 0;
}

C++: /*
　　　  ∧＿∧　やあ
　　 （´・ω・｀)　　　　　/　　　　　ようこそ、バーボンハウスへ。
　　 ／∇y:::::＼　　　 [￣]　　　　　このテキーラはサービスだから、まず飲んで落ち着いて欲しい。
　　 |:⊃:|:::::|　　　|──|
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣|　うん、「また」なんだ。済まない。
￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣|￣　  仏の顔もって言うしね、謝って許してもらおうとも思っていない。
￣￣￣￣￣￣￣￣￣￣￣￣￣￣／|
　　　　∇　∇　∇　∇　　　／.／|　　　でも、この提出を見たとき、君は、きっと言葉では言い表せない
　　　　┴　┴　┴　┴　／ ／　  |　　　「ときめき」みたいなものを感じてくれたと思う。
￣￣￣￣￣￣￣￣￣￣|／　　  |　　　殺伐としたコンテストの中で、そういう気持ちを忘れないで欲しい
￣￣￣￣￣￣￣￣￣￣　　　　 |　　　そう思って、この提出を投げたんだ。
　　　(⊆⊇)　(⊆⊇)　(⊆⊇)　　|
　    ||　　 ||　　||　　|　　　 じゃあ、判定を聞こうか。
　　.／|＼　／|＼ ／|＼
*/

#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <array>
#include <bitset>
#include <climits>
#include <cmath>
#include <cstdio>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <string>
#include <vector>
using namespace std;
#define fst first
#define snd second
#define ALL(obj) (obj).begin(),(obj).end()
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define RFOR(i,a,b) for(int i = (b-1);i>=a;i--)
#define REP(i,n)  FOR(i,0,n)
#define RREP(i,n) RFOR(i,0,n) 
#define SIZE(x) ((int)(x).size())
#define debug(x) cerr << #x << " -> " << x << " (line:" << __LINE__ << ")" << '\n';
#define debugpair(x, y) cerr << "(" << #x << ", " << #y << ") -> (" << x << ", " << y << ") (line:" << __LINE__ << ")" << '\n';
typedef long long lint;
typedef pair<int, int> pint;
typedef pair<lint, lint> plint;
typedef vector<lint> vec;
typedef vector<vector<lint>> matrix;
typedef priority_queue<lint> p_que;
typedef priority_queue<lint, vector<lint>, greater<lint>> p_que_rev;
const lint INF = INT_MAX;
const lint LINF = LLONG_MAX;
const lint MOD = 1000000000 + 7;
const double EPS = 1e-9;
const double PI = acos(-1);
const int di[]{0, -1, 0, 1, -1, -1, 1, 1};
const int dj[]{1, 0, -1, 0, 1, -1, -1, 1};

lint gcd(lint a, lint b) {
    lint r;
    while (b != 0) {
        r = a % b;
        a = b; 
        b = r;
    }
    return a;
}

lint lcm(lint a, lint b) {
    return (a / gcd(a, b)) * b;
}

lint power(lint x, lint n, lint mod = MOD) {
    lint ret = 1;
    while(n > 0) {
        if(n & 1){
            (ret *= x) %= mod;
        }
        (x *= x) %= mod;
        n >>= 1;
    }
    return ret;
}

vector<lint> make_power(int n){
    lint num = 1;
    vector<lint> ret;
    for (int i=0; i<=n; ++i){
        ret.push_back(num);
        num *= 2;
    }
    return ret;
}

int main()
{
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    map<int, bitset<7>> mapping;
    mapping.insert(make_pair(0, 0b0111111));
    mapping.insert(make_pair(1, 0b0000110));
    mapping.insert(make_pair(2, 0b1011011));
    mapping.insert(make_pair(3, 0b1001111));
    mapping.insert(make_pair(4, 0b1100110));
    mapping.insert(make_pair(5, 0b1101101));
    mapping.insert(make_pair(6, 0b1111101));
    mapping.insert(make_pair(7, 0b0100111));
    mapping.insert(make_pair(8, 0b1111111));
    mapping.insert(make_pair(9, 0b1101111));
    int n;
    int k = 0;
    bitset<7> num;
    bitset<7> b;
    num = 0b0000000;
    b = 0b0000000;
    cin >> n;
    while(n != -1){
        REP(i, n){
            num = mapping.at(k);
            cin >> k;
            b = mapping.at(k);
            if(i != 0){
                cout << (num ^ b) << endl;
            }
            else {
                cout << b << endl;
            }
        }
        cin >> n;
    }
    return 0;
}

C++: #include <stdio.h>
#include <iostream>

using namespace std;

void t(int a[],int b[],int c[]) {
	for (int i = 0; i < 7; i++) {
		if (a[i] != c[i]) {
			a[i] = c[i];
			b[i] = 1;
		}
	}
	return;
}

int main() {
	int a[7] = {0};
	int k;

	while (1) {
		int b[7] = {0};
		cin >> k;
		if (k == -1) {
			break;
		} else {
			if (k == 0) {
				int c[] = {1,1,1,1,1,1,0};
				t(a,b,c);
			} else if (k == 1) {
				int c[] = {0,1,1,0,0,0,0};
				t(a,b,c);
			} else if (k == 2) {
				int c[] = {1,1,0,1,1,0,1};
				t(a,b,c);
			} else if (k == 3) {
				int c[] = {1,1,1,1,0,0,1};
				t(a,b,c);
			} else if (k == 4) {
				int c[] = {0,1,1,0,0,1,1};
				t(a,b,c);
			} else if (k == 5) {
				int c[] = {1,0,1,1,0,1,1};
				t(a,b,c);
			} else if (k == 6) {
				int c[] = {1,0,1,1,1,1,1};
				t(a,b,c);
			} else if (k == 7) {
				int c[] = {1,1,1,0,0,1,0};
				t(a,b,c);
			} else if (k == 8) {
				int c[] = {1,1,1,1,1,1,1};
				t(a,b,c);
			} else {
				int c[] = {1,1,1,1,0,1,1};
				t(a,b,c);
			}
			
			for (int i = 6; i >= 0; i--) {
				cout << b[i];
			}
			cout << endl;
		}
	}

	return 0;
}