#include <bits/stdc++.h>
using namespace std;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
const int dxK[] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int dyK[] = {0, 1, 1, 1, 0, -1, -1, -1};
long long n;
vector<string> split(std::string txt, char ch) {
  size_t pos = txt.find(ch);
  size_t initialPos = 0;
  vector<string> strs;
  while (pos != std::string::npos) {
    strs.push_back(txt.substr(initialPos, pos - initialPos));
    initialPos = pos + 1;
    pos = txt.find(ch, initialPos);
  }
  strs.push_back(
      txt.substr(initialPos, std::min(pos, txt.size()) - initialPos + 1));
  return strs;
}
int main(int argc, char const *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  string str;
  cin >> str;
  n = str.length();
  if (str[0] == '@' or str[n - 1] == '@') {
    cout << "No solution" << endl;
    return 0;
  }
  vector<string> res;
  vector<string> subparts = split(str, '@');
  if (subparts.size() < 2) {
    cout << "No solution" << endl;
    return 0;
  }
  string st = subparts[0];
  for (int i = 1; i < subparts.size() - 1; ++i) {
    if (subparts[i].length() <= 1) {
      cout << "No solution" << endl;
      return 0;
    }
    st += "@";
    st += subparts[i][0];
    res.push_back(st);
    st = subparts[i].substr(1, subparts[i].length() - 1);
  }
  st += "@";
  st += subparts[subparts.size() - 1];
  res.push_back(st);
  for (int i = 0; i < res.size(); ++i) {
    cout << res[i];
    if (i != res.size() - 1) cout << ",";
  }
  return 0;
}
