Go: package main

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

func main() {
	stdin := bufio.NewScanner(os.Stdin)

	for stdin.Scan() {
		n, _ := strconv.Atoi(stdin.Text())
		if n == 0 {
			break
		}
		sales := make(map[string]int)
		existed := make(map[string]bool)
		order := make([]string, 4000)
		flg := false
		for i := 0; i < n; i++ {
			stdin.Scan()
			l := strings.Split(stdin.Text(), " ")
			e := l[0]
			p, _ := strconv.Atoi(l[1])
			q, _ := strconv.Atoi(l[2])
			sales[e] += p * q
			if !existed[e] {
				order = append(order, e)
				existed[e] = true
			}
		}
		for _, v := range order {
			if sales[v] >= 1000000 {
				fmt.Println(v)
				flg = true
			}
		}
		if flg == false {
			fmt.Println("NA")
		}
	}
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <string>
#include <map>
#include <functional>
#include <cmath>
#include <cstdio>
using namespace std;

#define PI 4*atan(1)

int main(){
  int n;
  while(cin >> n, n){
    map<int,int> e;
    vector<int> num;
    int cntnum[4000] = {0};
    for(int i = 1; i <= 4000; i++){
      e[i] = 0;
    }
    for(int i = 0; i < n; i++){
      int tmp[3];
      cin >> tmp[0] >> tmp[1] >> tmp[2];
      e[tmp[0]] += tmp[1] * tmp[2];
      if(cntnum[tmp[0]] == 0){
        num.push_back(tmp[0]);
        cntnum[tmp[0]]++;
      }
    }
    int cnt = 0;
    for(int i = 0; i < num.size(); i++){
      if(e[num[i]] >= 1000000){
        cout << num[i] << endl;
        cnt++;
      }
    }
    if(cnt == 0){
      cout << "NA" << endl;
    }
  }
}

C++: #include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int aa[10000]={0},x=0,y=0,z=0,flg=0,a;
    while(cin>>a)
    {
        if(a==0)break;
        for(int i=0;i<a;i++)
        {
            cin>>x>>y>>z;
            aa[x]+=y*z;
        }
        for(int i=0;i<4010;i++)
        {
            if(aa[i]>=1000000)
            {
                flg=1;
                cout<<i<<endl;
            }
        }
        if(flg==0)cout<<"NA"<<endl;
        for(int i=0;i<4010;i++)
        {
            aa[i]=0;
            flg=0;
        }
    }
    return 0;
}

C++: #include <iostream>
#include <string.h>
#include <queue>

using namespace std;

int N, M;

int main() {
	long long  goal = 1000000;

	for (; cin >> N;) {
		if (!N) break;
		long long  v[4000];
		queue<int> que;
		memset(v, 0, sizeof(v));
		for (int i = 0; i < N; i++) {
			long long  e, p, q;
			cin >> e >> p >> q;
			que.push(e);
			v[e - 1] += p*q;
		}
		bool flag = false;
		while(!que.empty()){
			if (v[que.front()] >= goal) {
				flag = true;
				v[que.front()] = 0;
				cout << que.front() + 1 << endl;
			}
			que.pop();
		}
		if (!flag) cout << "NA" << endl;
	}

	return 0;
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
 
#define rep(i, n) for(int i = 0; i < n; i ++)
#define ITER(T) __typeof((T).begin())
#define each(T, it) for(ITER(T) it =(T).begin(); it!=(T).end(); it++)
#define ALL(T) T.begin(), T.end()
#define mp make_pair
#define pb push_back
#define MEMSET(v, h) memset((v), h, sizeof(v))
 
using namespace std; 

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

const int INF = 1 << 24;
const int N = 4001;
const int B = (int)1e6;

int main(void){
    for(int n; cin >> n, n;){
        bool f = false;
        vector<ll> in(N);
        vi p;

        while(n --){
            int id, v, m; cin >> id >> v >> m;
            
            if((in[id] += v * m) >= B) in[id] = B;
            if(find(ALL(p), id) == p.end()) p.pb(id);
        }
        each(p, it) if(in[*it] == B) cout << *it << endl, f = true;

        if(!f) cout << "NA" << endl;
    }
 
    return 0;
}

C++: #include <iostream>
#include <cmath>
#include <algorithm>

using namespace std;

int main(void){
	int n;
	while(1){
		cin >> n;
		if(n==0)
			break;
		int c[4001]={} , id[10000000];
		for (int i=0; i<n; i++){
			int p , q;
			cin >> id[i] >> p >> q;
			c[id[i]] += p*q;
		}
		bool f=1;
		for (int i=0; i<n; i++){
			if (c[id[i]]>=1000000){
				cout << id[i] << endl;
				c[id[i]]=0;
				f=0;
			}
		}
		if (f)
			cout << "NA" << endl;

	}

	return 0;
}

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

int main()
{
    int e[4001],p[100000],q[1000000],n;
    std::list<int> Anslist;
    
    while(cin>>n){
        
        if(n==0)
            break;
        
        for(int i=0,j=0; i<n; i++){
            cin>>e[i]>>p[i]>>q[i];
        
            if(p[i]*q[i]>=1000000){
                Anslist.push_back(e[i]);
                j++;
            }
        
        }
    
        if(Anslist.empty()){
            cout << "NA" <<endl;
        }
    
        else{
            list<int>::iterator it = Anslist.begin();
            while( it != Anslist.end())
            {
                cout<< *it << endl;
                it++;
            }
        }
    }
    
    
    
    return 0;
}

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


typedef std::pair<int,int> Sale;

int main(){
  int n;

  while(1){
    std::cin>>n;
    if(n==0)break;
    std::vector<Sale> data(n);

    for(auto &d:data){
      int price,num;
      std::cin>>d.first>>price>>num;
      d.second=price*num;
    }

    std::vector<Sale> unduplicate_data;

    for(auto &d:data){
      auto s=std::find_if(unduplicate_data.begin(),unduplicate_data.end(),[d](const Sale& s)->bool{ return s.first==d.first; });
      if(s==unduplicate_data.end()){
        unduplicate_data.push_back(d);
      }else{
        s->second+=d.second;
      }
    }

  
    bool isNA=true;
    for(auto d:unduplicate_data){
      if(d.second>=1000000){
        std::cout<<d.first<<std::endl;
        isNA=false;
      }
    }
    if(isNA)std::cout<<"NA"<<std::endl;
  }
}

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

struct Saler
{
	int Number;
	int Saled;
};

int main(){
	struct Saler* sl;
	int n, a, b, c, i;
	bool isFound;
	
loop:
	scanf("%d\n", &n);		// データ個数
	if(n == 0) goto end_scope;
	sl = (struct Saler*)malloc(sizeof(struct Saler) * n);
	memcpy(sl, 0, sizeof(struct Saler)*n);
	for(int j = 0; j < n; j++)
	{
		scanf("%d %d %d\n", &a, &b, &c);
		for(i = 0; i < n; i++)
		{
			if(sl[i].Number == 0)
			{
				sl[i].Number = a;
				sl[i].Saled = b * c;
				break;
			}
			if(sl[i].Number == a)
			{
				sl[i].Saled += b * c;
				break;
			}
		}
	}
	isFound = false;
	for(int j = 0; j < n; j++)
	{
		if(sl[i].Saled >= 1000000)
		{
			cout << sl[i].Number << endl;
			isFound = true;
		}
	}
	!isFound && (cout << "NA" << endl);
end_scope:
    return 0;
}

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

int main(){
	int n;
	
	while(cin>>n,n){
		int printed=0;
		long table[4001];
		for(int i=0;i<4001;i++){
			table[i]=0;
		}
		for(int i=0;i<n;i++){
			int b,t,k;
			cin>>b>>t>>k;
			if(table[b]<1000000){
				table[b]+=t*k;
				if(table[b]>=1000000){
					cout<<b<<endl;
					printed=1;
				}
			}
		}
		if(printed==0){
			cout<<"NA"<<endl;
		}
	}

	return 0;
}